Eine SELECT-Abfrage innerhalb einer Transaktion ist an sich nicht ordnungsgemäß vor UPDATEs und DELETEs geschützt.
Was Sie benötigen, um Folgendes zu verwenden:
Wenn Sie ein Problem haben Delete From orders Where id=1
, geschieht dies, sobald die Zeilen in der orders
Tabelle am Ende der Transaktion ihre Sperren aufgehoben haben. Sie können (bitte auf einem Dev / Staging-Server) mit der Verwendung der READ UNCOMMITTED
Transaktionsisolationsstufe experimentieren , um das Löschen logisch durchzuführen, aber nur beim Festschreiben wird es sichtbar und dauerhaft aufgezeichnet.
Bei der zweiten Transaktion sind grundsätzlich alle Wetten ungültig. Wenn du läufst
select * From orders Where id=1;
UPDATE orders SET username="John" Where id=1;
Laufen Delete From orders Where id=1
wird sofort festgeschrieben. Abhängig von der Reihenfolge, in der MySQL diese Anweisungen ausführt, werden die Löschzeilen angezeigt (oder nicht).
VORBEHALT
MySQL 5.6 hat jetzt Folgendes :
START TRANSACTION READ WRITE;
START TRANSACTION READ ONLY;
Die Modifikatoren READ WRITE und READ ONLY legen den Transaktionszugriffsmodus fest. Sie erlauben oder verbieten Änderungen an Tabellen, die in der Transaktion verwendet werden. Die Einschränkung NUR LESEN verhindert, dass die Transaktion sowohl Transaktions- als auch Nicht-Transaktionstabellen ändert oder sperrt, die für andere Transaktionen sichtbar sind. Die Transaktion kann weiterhin temporäre Tabellen ändern oder sperren. Diese Modifikatoren sind ab MySQL 5.6.5 verfügbar.