sql >> Databasteknik >  >> RDS >> Mysql

Hur återställer jag sekvensnummer för att bli konsekutiva?

Om fältet är din primära nyckel...

...då, som sagt på andra ställen i denna fråga, bör du inte byta ID. ID:n är redan unika och du varken behöver eller vill återanvända dem.

Nu, som sagt...

Annars...

Det är mycket möjligt att du har en annan fältet (det vill säga, såväl som PK) för någon applikationsdefinierad beställning. Så länge som denna ordning inte är inneboende i något annat fält (t.ex. om det är användardefinierat), så är det inget fel med detta.

Du kan återskapa tabellen med en (tillfällig) auto_increment och ta sedan bort auto_increment efteråt.

Jag skulle bli frestad att UPDATE i stigande ordning och tillämpa en inkrementerande variabel.

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

Det verkar ganska slösaktigt att göra detta varje gång du tar bort objekt, men tyvärr med denna manuella beställningsmetod finns det inte så mycket du kan göra åt det om du vill behålla kolumnens integritet.

Du kan möjligen minska belastningen, så att efter att ha raderat posten med myOrderCol lika med, säg, 5 :

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

Detta kommer att "shuffla" alla följande värden ned med ett.



  1. Hur hittar man distinkta kolumner i en kapslad underfråga i SQL?

  2. Hur man behåller snedstrecket när man undslipper citat i MySQL – CITAT()

  3. Hur man visar status och systemvariabler i MySQL Workbench med hjälp av GUI

  4. Ändra separator för WM_CONCAT-funktionen för Oracle 11gR2