2009-04-28 8 views

Antwort

0

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.

+0

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

+0

Die Sperre bleibt bis zum Ende der Transaktion erhalten, das ist der springende Punkt :) – Quassnoi

Verwandte Themen