sql >> Database >  >> RDS >> Mysql

Zijn database-triggers veilig voor integriteitsbeperkingen voor kruistabellen?

Het antwoord is triggers zijn niet veilig .

Het blijkt dat de trigger echt geen niet-vastgelegde wijzigingen in andere transacties ziet en foutloos doorgaat. Het kan zo worden gedemonstreerd

Transactie 1:

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

Transactie 2:

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

Beide transacties:

COMMIT;

Nu plays_in will bevat beide ingevoegde records, hoewel als A en B in een enkele transactie zouden worden uitgevoerd, de trigger een fout zou veroorzaken.

De hele voorbeeldbronnen kunnen hier worden verkregen



  1. Hoe de n-de rang in MySQL te vinden?

  2. jqGrid - Unieke ID voor nieuwe rij

  3. Aan de slag met Oracle LiveSQL

  4. Hoe meerdere rijen te selecteren op primaire sleutel met meerdere kolommen in MySQL?