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

Lassen Sie die zuvor gelöschte Nummer automatisch inkrementieren

Sie möchten dann keine automatisch inkrementierende Spalte verwenden. Wenn Sie die Lücken füllen möchten, setzen Sie sie auf eine int-Spalte und behandeln Sie die Logik in Stored Proc oder Insert.

BEARBEITEN:

Da es sich um eine int-Spalte handelt, können Sie sie numerisch ordnen. Führen Sie einfach einen SELECT Ids FROM Table Order By Ids durch um alle IDs abzurufen und nach Lücken im zurückgegebenen Datensatz zu suchen.

Es gibt wahrscheinlich einen einfacheren Weg, dies zu tun, aber Sie könnten die Ergebnisse mit einem Cursor durchlaufen und mit einem INT vergleichen Variable, die während der Schleife inkrementiert wird. Wenn Sie eine Lücke finden (keine Übereinstimmung), unterbrechen Sie die Schleife und verwenden Sie diesen INT Wert als Ihr INSERT Ich würde.

Ich werde Ihren Code nicht für Sie schreiben, aber das sind einige Schritte, die Sie in die richtige Richtung bringen. Es sollte ein wirklich grundlegender Teil der Programmierung sein, mit dem Sie umgehen können sollten.

Hoffe das hilft.

EDIT #2:

Wie andere angemerkt haben, ist es am besten, die Lücken zu lassen. Es sei denn, es gibt eine Obergrenze für die Länge und IDs MÜSSEN 1-30 sein (seltsam), lassen Sie es in Ruhe. Es bringt nichts, die Lücken zu füllen.

BEARBEITUNG #3:

Eine weitere Sache, die Sie beachten sollten:Wenn Sie aus irgendeinem Grund wirklich 1-30 behalten müssen, löschen Sie Ihre Zeilen nicht. Fügen Sie eine Spalte hinzu, um jede Zeile als aktiv oder nicht zu kennzeichnen, und aktualisieren Sie dann einfach die inaktiven Zeilen, wenn Sie dies benötigen, und kennzeichnen Sie sie dann als aktiv. Das ist SEHR hacky, aber Ihre Anforderung ist irgendwie hacky, also ...