Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Sind Datenbankauslöser sicher für tabellenübergreifende Integritätseinschränkungen?

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