auto_increment problem.

Tags:    databaser

Hejsa. Jeg har sådan en SQL kode her:
(Min database):

Fold kodeboks ind/udSQL kode 


Hver gang jeg sætter noget ind vha. PHP. Så gør den som den skulle gøre. Lad os nu sige at jeg har tilføjet 5 nye linjer. Så id's højeste værdi er 5.

Men sletter jeg f.eks. id nummer 3, så bliver 4 og 5 der stadig. Så vil jeg jo gerne have sådan at de rykker ned og bliver 3 og 4. Eller hvis jeg sletter det hele, så bliver de bare højere for hver jeg lægger på. Så den f.eks. starter ved 5 og så bliver den 6, men sletter jeg 6 og laver en ny bliver den bare 7.

- Magnus.



Der er ingen grund til at det virker på den måde som du efterspørger. Det er ikke meningen og bliver aldrig meningen. SQLite kører på den måde, medmindre du specifikt angiver andet, men MySQL bruger død og pine det samme stigende offset til nye ID-numre. Hvorfor? Fordi intet andet giver mening.

Hvis du har et link til noget indhold der har ID 23, og det indhold senere bliver slettet. Så rykker alle dine indholdselementer ned, og så er der pludseligt ikke nogen af dine links, hverken til ID 23 eller andre, der virker efter hensigten længere. Alt efter hvad dit indhold handler om kan det være helt katastrofalt.



Man har en auto-increment kolonne for at sikre at alle rækker har en unik primærnøgle. Hvis de skal rykke sammen, kræves det at alle fremmednøgler opdateres tilsvarende, og det giver en masse unødvendige skrivninger. Derudover kan man også risikere at den række der havde id 4 det ene øjeblik pludselig har id 3. Det gør det svært at finde frem til præcis den samme række en gang til, og gøre tabellen ubrugtil til webbrug.

Hvorfor må der ikke være huller i din serie af id'er?



Jeg har fundet en midlertidig løsning, hvis jeg sletter databasen og laver den igen og så derefter tilføjer 25stk. igen og dernest sletter nummer 24, så rykker de ned. Men sletter jeg dem alle, så starter den ved 26 :(

Er der ikke nogen løsning? Dette irritere mig ret så meget :)

Egentlig ikke pga. noget, men jeg syntes bare det ser ekstrem dumt ud med en bruger liste hvor id nummer 5 er væk.



Så du vil altså eliminere enhver form for konsistens i dit system af den grund at du synes det ser "dumt ud"?



Så du vil altså eliminere enhver form for konsistens i dit system af den grund at du synes det ser "dumt ud"?


Ren faktisk, ja. Men jeg har da set andre steder, hvor det virker "ordenligt". Undret mig bare over hvordan. Eller det være de har gjort det der. Men er det kompliceret at lave?



Hvis du fjerner auto_increment og selv styrer de id-numrer du tildeler, så burde det da være nemt nok at klare.



Hvis du fjerner auto_increment og selv styrer de id-numrer du tildeler, så burde det da være nemt nok at klare.


Hvordan "styre" det?



hvilke andre steder har du set det? Hvor mange databaser har du direkte adgang til da?

Anyway, jeg tror ikke på aktiv dødshjælp, heller ikke indenfor IT, så jeg hopper af her ;)



Indlæg senest redigeret d. 12.10.2009 12:03 af Bruger #8223
hvilke andre steder har du set det? Hvor mange databaser har du direkte adgang til da?

Anyway, jeg tror ikke på aktiv dødshjælp, heller ikke indenfor IT, så jeg hopper af her ;)



Jeg har ikke været inde i andres databaser, men har da set det på andre systemer. Men jeg har fundet en anden løsning. Jeg fjernet tallet og laver et billed istedet, så at man kan se brugerens status(det kan jeg nemlig "ORDER BY").

Tak for hjælpen :)





Indlæg senest redigeret d. 12.10.2009 13:28 af Bruger #15047
t