Mysql
 sql >> Base de données >  >> RDS >> Mysql

Les déclencheurs de base de données sont-ils sûrs pour les contraintes d'intégrité des tables croisées ?

La réponse est les déclencheurs ne sont pas sûrs .

Il s'avère que le déclencheur ne voit vraiment pas les modifications non validées effectuées dans d'autres transactions et passe sans erreur. Cela peut être démontré comme ceci

Transaction 1 :

START TRANSACTION;
INSERT INTO plays_in (BetID, PlayerID) VALUES (1,1); -- query A

Opération 2 :

START TRANSACTION;
INSERT INTO plays_in (BetID, PlayerID) VALUES (1,2); -- query B; in conflict with A, but passses

Les deux transactions :

COMMIT;

Maintenant plays_in contiendra les deux enregistrements insérés même si si A et B étaient exécutés dans une seule transaction, le déclencheur renverrait une erreur.

Tous les exemples de sources peuvent être obtenus ici