Mysql nach update

MySQL unterstützt "for update" - Schlüsselwort. Hier ist, wie ich getestet habe, dass es funktioniert wie erwartet. Ich öffnete 2 browser-tabs und Ausführung der folgenden Befehle in einem Fenster.

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from myxml where id = 2 for update;
....
mysql> update myxml set id = 3 where id = 2 limit 1;
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> commit;
Query OK, 0 rows affected (0.08 sec)

In einem anderen Fenster, begann ich, die Transaktion und versucht, eine update-Sperre auf dem gleichen Datensatz.

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from myxml where id = 2 for update;
Empty set (43.81 sec)

Wie Sie sehen können aus dem obigen Beispiel, ich konnte nicht wählen Sie den Datensatz für 43 Sekunden, als die Transaktion wurde bearbeitet von einer anderen Anwendung in das Fenster Nr. 1. Sobald die Verhandlung vorbei war, bekam ich zu wählen Sie die Aufnahme, aber da die id 2 wurde geändert-id 3, die die Transaktion ausgeführt wurde, zunächst kein Datensatz zurückgegeben wurde.

Meine Frage ist, was sind die Nachteile der Verwendung von "for update" - syntax? Wenn ich nicht einen commit für die Transaktion ausgeführt wird in Fenster 1 wird der Datensatz gesperrt werden, für immer?

"Nachteile", die sehr abhängig von Ihren Anforderungen, können Sie bitte genauer erklären, was Sie brauchen, die Schlösser?
Ich habe angenommen, Sie Antworten auf fast alle Fragen. Sie können es überprüfen, wenn Sie wollen. Bitte aufhören die Leute zu Fragen die Arbeit an etwas, das nicht möglich ist 🙂

InformationsquelleAutor shantanuo | 2010-12-30

Schreibe einen Kommentar