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

Wie erstelle ich eine Sequenz in MySQL?

Dies ist eine Lösung, vorgeschlagen von der MySQL-Handbuch :

Wenn expr als Argument an LAST_INSERT_ID() übergeben wird, wird der Wert des Arguments von der Funktion zurückgegeben und als nächster Wert gespeichert, der von LAST_INSERT_ID() zurückgegeben wird. Dies kann verwendet werden, um Sequenzen zu simulieren:

Erstellen Sie eine Tabelle für den Sequenzzähler und initialisieren Sie ihn:

    mysql> CREATE TABLE sequence (id INT NOT NULL);
    mysql> INSERT INTO sequence VALUES (0);

Verwenden Sie die Tabelle, um Sequenznummern wie folgt zu generieren:

    mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
    mysql> SELECT LAST_INSERT_ID();

Die UPDATE-Anweisung erhöht den Sequenzzähler und bewirkt, dass der nächste Aufruf von LAST_INSERT_ID() den aktualisierten Wert zurückgibt. Die SELECT-Anweisung ruft diesen Wert ab. Die C-API-Funktion mysql_insert_id() kann auch verwendet werden, um den Wert zu erhalten. Siehe Abschnitt 23.8.7.37, „mysql_insert_id()“.

Sie können Sequenzen generieren, ohne LAST_INSERT_ID() aufzurufen, aber der Nutzen der Verwendung der Funktion auf diese Weise besteht darin, dass der ID-Wert im Server als letzter automatisch generierter Wert beibehalten wird. Es ist für mehrere Benutzer sicher, da mehrere Clients die UPDATE-Anweisung ausgeben und ihren eigenen Sequenzwert mit der SELECT-Anweisung (oder mysql_insert_id()) erhalten können, ohne andere Clients zu beeinflussen oder von ihnen beeinflusst zu werden, die ihre eigenen Sequenzwerte generieren.