Gå til innhold

Mulig å redigere hva neste auto_increment er? SQL


Anbefalte innlegg

Skrevet

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

Videoannonse
Annonse
Skrevet (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 av hockey500
Skrevet

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.

Skrevet (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 av hockey500
Skrevet

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å :)

Skrevet

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

Skrevet

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.

Skrevet (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 av hockey500
Skrevet

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

Skrevet

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?

Skrevet
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).

Skrevet

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 ;

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...