sql >> Base de Datos >  >> RDS >> Mysql

¿Los activadores de base de datos son seguros para las restricciones de integridad de tablas cruzadas?

La respuesta es los disparadores no son seguros .

Resulta que el disparador realmente no ve los cambios no confirmados realizados en otras transacciones y pasa sin error. Se puede demostrar así

Transacción 1:

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

Transacción 2:

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

Ambas transacciones:

COMMIT;

Ahora plays_in will contendrá ambos registros insertados aunque si A y B se ejecutaran en una sola transacción, el activador generaría un error.

Las fuentes de ejemplo completas se pueden obtener aquí