Gå til innhold

Mulig å redigere hva neste auto_increment er? SQL


Anbefalte innlegg

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
Videoannonse
Annonse

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 av hockey500
Lenke til kommentar

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 av hockey500
Lenke til kommentar

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

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

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

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 av hockey500
Lenke til kommentar

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
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...