Kann eine Transaktion in einer gespeicherten Prozedur gesperrt werden, um zu verhindern, dass andere Tabellen aktualisieren?
Wenn Sie einige DML
auf einer InnoDB
Tabelle ausführen, beeinflusst die Zeilen bis zum Ende der Transaktion gesperrt bekommen (egal, ist es innerhalb einer gespeicherten Prozedur oder nicht).
Sie können die gesperrten Zeilen innerhalb derselben Transaktion ändern, die sie gesperrt hat.
Um einige Zeilen explizit zu sperren, Ausgabe:
SELECT *
FROM table
WHERE condition
FOR UPDATE
Außer commiting oder die Transaktion Rollback, gibt es keinen anderen Weg, um die Zeilen
Muss ich ausdrücklich setzen müssen, um entsperren Rollback-Logik oder wird die Transaktion automatisch zurückgesetzt, wenn ein Fehler auftritt, weil sie den Commit-Befehl nie erreicht.
Sie müssen einen Rollback explizit ausführen.
Ich denke, was ich frage, ist, werden die Zeilen für die Dauer der Transaktion gesperrt bleiben. Das heißt, wenn ich mehrere Updates habe, wird die Sperre nach jeder Aktualisierung oder erst nach Abschluss aller Aktualisierungen freigegeben, da sie sich in einer Transaktion befinden. – richs
Die Sperre bleibt bis zum Ende der Transaktion erhalten, das ist der springende Punkt :) – Quassnoi