Die Antwort lautet:Trigger sind nicht sicher .
Es stellt sich heraus, dass der Trigger nicht festgeschriebene Änderungen, die in anderen Transaktionen vorgenommen wurden, wirklich nicht sieht und ohne Fehler durchläuft. Es kann so demonstriert werden
Transaktion 1:
START TRANSACTION;
INSERT INTO plays_in (BetID, PlayerID) VALUES (1,1); -- query A
Transaktion 2:
START TRANSACTION;
INSERT INTO plays_in (BetID, PlayerID) VALUES (1,2); -- query B; in conflict with A, but passses
Beide Transaktionen:
COMMIT;
Jetzt plays_in
enthält beide eingefügten Datensätze, obwohl der Trigger einen Fehler auslösen würde, wenn A und B in einer einzigen Transaktion ausgeführt würden.
Die gesamten Beispielquellen finden Sie hier