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

Emulieren einer transaktionssicheren SEQUENCE in MySQL

Wenn die automatische Inkrementierung für Ihre Anforderungen nicht gut genug ist, können Sie mit n einen atomaren Sequenzmechanismus erstellen benannte Sequenzen wie folgt:

Erstellen Sie eine Tabelle zum Speichern Ihrer Sequenzen:

CREATE TABLE sequence (
  seq_name varchar(20) unique not null,
  seq_current unsigned int not null
);

Angenommen, Sie haben eine Zeile für 'foo' in der Tabelle, können Sie die nächste Sequenz-ID atomar wie folgt erhalten:

UPDATE sequence SET seq_current = (@next := seq_current + 1) WHERE seq_name = 'foo';
SELECT @next;

Keine Schlösser erforderlich. Beide Anweisungen müssen in derselben Sitzung ausgeführt werden, damit die lokale Variable @next tatsächlich definiert ist, wenn die Auswahl erfolgt.