Mysql
 sql >> Database >  >> RDS >> Mysql

I trigger di database sono sicuri per i vincoli di integrità delle tabelle incrociate?

La risposta è i trigger non sono sicuri .

Si scopre che il trigger in realtà non vede le modifiche non vincolate eseguite in altre transazioni e passa senza errori. Può essere dimostrato in questo modo

Transazione 1:

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

Transazione 2:

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

Entrambe le transazioni:

COMMIT;

Ora plays_in will contiene entrambi i record inseriti anche se A e B sono stati eseguiti in una singola transazione, il trigger genererebbe un errore.

L'intera fonte di esempio può essere consultata qui