Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie setze ich Sequenznummern zurück, damit sie fortlaufend werden?

Wenn das Feld Ihr Primärschlüssel ist...

... dann sollten Sie, wie an anderer Stelle zu dieser Frage erwähnt, die IDs nicht ändern. Die IDs sind bereits eindeutig und Sie müssen und wollen sie nicht wiederverwenden.

Nun, das sagte...

Ansonsten...

Gut möglich, dass Sie eine andere haben Feld (d. h. ebenso wie die PK) für einige anwendungsdefinierte Reihenfolgen. Solange diese Reihenfolge nicht in einem anderen Feld enthalten ist (z. B. wenn es benutzerdefiniert ist), ist daran nichts auszusetzen.

Sie könnten die Tabelle mit einem (temporären) auto_increment neu erstellen Feld und entfernen Sie dann das auto_increment danach.

Ich wäre versucht zu UPDATE in aufsteigender Reihenfolge und wenden Sie eine inkrementierende Variable an.

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

Es scheint ziemlich verschwenderisch zu sein, dies jedes Mal zu tun Sie löschen Elemente, aber leider können Sie bei diesem manuellen Sortieransatz nicht viel dagegen tun, wenn Sie die Integrität der Spalte aufrechterhalten möchten.

Eventuell könnte man die Last reduzieren, indem man nach dem Löschen des Eintrags mit myOrderCol gleich, sagen wir, 5 :

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

Dadurch werden alle folgenden Werte um eins nach unten "gemischt".