skromt Skrevet 29. juni 2006 Del Skrevet 29. juni 2006 Er det mulig å redigere hva neste auto_increment er? SQL-spørring: CREATE TABLE lala ( `id` int( 4 ) NOT NULL AUTO_INCREMENT , `name` varchar( 65 ) NOT NULL default '', PRIMARY KEY ( `id` ) ) La oss si jeg har en gjestebok, og noen monger seg og skriver noe fælt. Da vil jeg gjerne fjerne det. Og hvis jeg fjerner f.eks ID med 13, hvordan kan jeg da få auto_increment å starte igjen på 13. Eller restarte hele greia? Er det mulig? om det er mulig kan jeg sikkert google, men takker for hjelp:P Lenke til kommentar
hockey500 Skrevet 29. juni 2006 Del Skrevet 29. juni 2006 (endret) 2 spørringer er det beste løsningen jeg kommer på: DELETE from `lala` WHERE id = 13; UPDATE `lala` SET id = id - 1 where id > 13; finnes sikkert noen guruer her som finner på en bedre løsning vet forresten ikke om mysql har en kortere måte å skrive "id = id - 1" på, noe ala id-- som i PHP Endret 29. juni 2006 av hockey500 Lenke til kommentar
skromt Skrevet 29. juni 2006 Forfatter Del Skrevet 29. juni 2006 vet du om den update'en funker? Jeg tror alikevel ID vil starte på 13 igjen=P Kan jo alltids ligge inn en fake ID 12 om jeg gidder. Lenke til kommentar
hockey500 Skrevet 29. juni 2006 Del Skrevet 29. juni 2006 ja, jeg vet at det ovenfor funker Lenke til kommentar
skromt Skrevet 29. juni 2006 Forfatter Del Skrevet 29. juni 2006 og da vil auto increment starte fra 12 igjen`? Lenke til kommentar
hockey500 Skrevet 29. juni 2006 Del Skrevet 29. juni 2006 (endret) hvis tabellen slik slik ut først: 1 | Navn1 2 | Navn2 3 | Navn3 4 | Navn4 5 | Navn5 og du kjører DELETE FROM `tabell` WHERE id = 3 LIMIT 1; UPDATE `tabell` SET id = id - 1 WHERE id > 3; vil den se slik ut: 1 | Navn1 2 | Navn2 3 | Navn4 4 | Navn5 EDIT: fiksa på spørringen, la til en UPDATE Endret 29. juni 2006 av hockey500 Lenke til kommentar
roac Skrevet 29. juni 2006 Del Skrevet 29. juni 2006 Eh, at du sletter en rad gjør vel ikke at IDen til etterfølgende rader endres? Dette du beskriver her bare MÅ være feil, du får slettet "3 - Navn 3", slik at du sitter igjen med 1,2,4,5. Dessuten mener jeg bestemt at Limit 1 ikke har noen innvirkning her, siden det bestemmer maks antall rader som skal slettes, og det er bare en rad med IDen 3 uansett. Dessverre (rettelse: heldigvis) har jeg ingen MySQL database å teste dette på Lenke til kommentar
hockey500 Skrevet 29. juni 2006 Del Skrevet 29. juni 2006 det han ønsket var at det ikke ble store hull i ID-rekken når han slettet et innlegg i gjesteboken midt i tabellen. altså at ID'ene hele tiden var sammenhengende. min løsning er nok lite elegant, men den løser problemet. og den er testet, så den funker. Han ønsket å IKKE sitte igjen med 1,2,4,5, men ønsket da at det skulle rette seg selv til 1,2,3,4 istedet. Hvertfall slik jeg tolket spørsmålet Siden ID er primary key er det ikke nødvendig med LIMIT 1 nei, det har du rett i Lenke til kommentar
roac Skrevet 29. juni 2006 Del Skrevet 29. juni 2006 Mener du seriøst at MySQL endrer primærnøkkelen til etterfølgende rader når du sletter en rad? Dette her tror jeg rett og slett ikke på. Jeg må installere selv og sjekke, da dette bare er for dumt til å være sant. Lenke til kommentar
hockey500 Skrevet 29. juni 2006 Del Skrevet 29. juni 2006 (endret) nei, MySQL endrer IKKE primærnøkkelen. men han VIL at den skal gjøre det. Skjønner at det ble litt tull der ja... Jeg glemte i posten ovenfor å legge til den delen av koden som reduserer primærnøkkelen med 1 for alle rader som har høyere primærnøkkel enn den han slettet. Jeg har visst lest et sted at det er god kodeskikk å aldri endre primærnøklene, men det får være trådstarters problem Endret 29. juni 2006 av hockey500 Lenke til kommentar
roac Skrevet 29. juni 2006 Del Skrevet 29. juni 2006 Da er vi mer enige her. Men, når det er sagt: Dersom han er avhengig av at IDen er en eller annen form for løpenummer vil jeg påstå at det er noe galt med databasedesignet, da en godt designet database ikke skal ha slike krav Lenke til kommentar
hockey500 Skrevet 29. juni 2006 Del Skrevet 29. juni 2006 det kan jeg være enig i ja, men det får, som sagt, være hans problem. Det var ikke det han spurte om Lenke til kommentar
skromt Skrevet 30. juni 2006 Forfatter Del Skrevet 30. juni 2006 Jeg var bare nysjerrig;) Jeg kan jo forsåvidt lage mitt eget auto increment, som først tar kontakt med databasen og sjekker hva den siste ID'en er, og så +'er med 1. Det er jo greit vel? Lenke til kommentar
roac Skrevet 30. juni 2006 Del Skrevet 30. juni 2006 Jeg var bare nysjerrig;) Jeg kan jo forsåvidt lage mitt eget auto increment, som først tar kontakt med databasen og sjekker hva den siste ID'en er, og så +'er med 1. Det er jo greit vel? 6410860[/snapback] Det vil jo fungere, men det vil fremdeles ikke løse problematikk rundt hull i nummerserien ved sletting. Det er forøvrig interessant at du nevner denne løsningen, fordi dette kan brukes i tilfeller der du ikke tillater sletting av rader, og ikke kan ha hull i nummerserien, f eks ved generering av fakturanummer. Det kan også være verdt å merke seg at SQL Standarden har definert sequence, som blant annet er implementert av Oracle. Denne brukes til å trekke genereringen av nummerserier vekk fra tabellen hvor nummerserien skal benyttes, samtidig som det gir noen nye muligheter (unik id på tvers av tabeller). Lenke til kommentar
endrebjo Skrevet 30. juni 2006 Del Skrevet 30. juni 2006 Du kan ihvertfall sette hvor auto_increment skal starte når du lager tabellen. CREATE TABLE 'tabell' ( 'kolonne' int(6) NOT NULL auto_increment, PRIMARY KEY ('kolonne') ) AUTO_INCREMENT=45 ; Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå