mysql - einen Mechanismus erstellen, der den Abfolgen von Oracle ähnelt

MySQL bietet einen automatischen Mechanismus zum Inkrementieren von Datensatz-IDs. Dies ist für viele Zwecke in Ordnung, aber ich muss in der Lage sein, die von ORACLE angebotenen Sequenzen zu verwenden. Offensichtlich macht es keinen Sinn, eine Tabelle für diesen Zweck zu erstellen.

Die Lösung sollte einfach sein:

1) Erstellen Sie eine Tabelle, in der alle erforderlichen Sequenzen enthalten sind.

2) Erstellen Sie eine Funktion, die den Wert einer bestimmten Sequenz erhöht und den neuen Wert zurückgibt.

3) Erstellen Sie eine Funktion, die den aktuellen Wert einer Sequenz zurückgibt.

In der Theorie sieht es einfach aus ... ABER ...

Wenn der Wert einer Sequenz erhöht wird (ähnlich wienextval in Oracle) müssen Sie verhindern, dass andere Sitzungen diesen Vorgang ausführen (oder sogar den aktuellen Wert abrufen), bis die Aktualisierung abgeschlossen ist.

Zwei theoretische Optionen:

a - Verwenden Sie eine UPDATE-Anweisung, die den neuen Wert in einer einzigen Aufnahme zurückgibt, oder

b - Sperrt die Tabelle zwischen UPDATE und SELECT.

Leider scheint es MySQL nicht zu erlauben, Tabellen innerhalb von Funktionen / Prozeduren zu sperren, und während Sie versuchen, das Ganze in einer einzigen Anweisung (wie UPDATE ... RETURNING ...) zu machen, müssen Sie Variablen vom Typ @ verwenden, die Überlebe den Abschluss der Funktion / Prozedur.

Hat jemand eine Idee / funktionierende Lösung dafür?

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage