sql >> Database teknologi >  >> RDS >> Mysql

Hvordan nulstiller jeg sekvensnumre, så de bliver fortløbende?

Hvis feltet er din primære nøgle...

...så, som sagt andetsteds i dette spørgsmål, bør du ikke skifte ID. ID'erne er allerede unikke, og du hverken behøver eller ønsker at genbruge dem.

Nå, når det er sagt...

Ellers...

Det er meget muligt, at du har en anden felt (det vil sige såvel som PK) for nogle applikationsdefinerede bestilling. Så længe denne rækkefølge ikke er iboende i et andet felt (f.eks. hvis det er brugerdefineret), så er der ikke noget galt med dette.

Du kan genskabe tabellen ved hjælp af en (midlertidig) auto_increment og fjern derefter auto_increment bagefter.

Jeg ville blive fristet til at UPDATE i stigende rækkefølge og anvende en stigende variabel.

SET @i = 0;
UPDATE `table`
   SET `myOrderCol` = @i:[email protected]+1
 ORDER BY `myOrderCol` ASC;

Det virker ganske spild at gøre dette hver gang du sletter elementer, men med denne manuelle bestillingstilgang er der desværre ikke meget, du kan gøre ved det, hvis du vil bevare kolonnens integritet.

Du kan muligvis reducere belastningen, sådan at efter sletning af posten med myOrderCol lig med f.eks. 5 :

SET @i = 5;
UPDATE `table`
   SET `myOrderCol` = @i:[email protected]+1
 WHERE `myOrderCol` > 5
 ORDER BY `myOrderCol` ASC;

Dette vil "blande" alle følgende værdier ned med én.



  1. Ugyldigt forsøg på at læse, når læseren er lukket

  2. 4 måder at indsætte flere rækker på i Oracle

  3. cd:-M:ugyldig mulighed

  4. Hvordan kan jeg redigere værdier af en INSERT i en trigger på SQL Server?