sql >> Databáze >  >> RDS >> Mysql

Jsou spouštěče databáze bezpečné pro omezení integrity mezi tabulkami?

Odpověď zní spouštěče nejsou bezpečné .

Ukazuje se, že spouštěč skutečně nevidí neprovedené změny provedené v jiných transakcích a projde bez chyby. Lze to demonstrovat takto

Transakce 1:

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

Transakce 2:

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

Obě transakce:

COMMIT;

Nyní plays_in will obsahuje oba vložené záznamy, i když pokud by byly A a B provedeny v jedné transakci, spouštěč by vyvolal chybu.

Celé příklady zdrojů lze stáhnout zde



  1. SSRS - Group_Concat ekvivalentní pomocí výrazu?

  2. Jak připravit příkazy a parametry vazby v Postgresql pro C++

  3. Existuje zkratka pro SELECT * FROM?

  4. Příklady CURTIME() – MySQL