Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy wyzwalacze bazy danych są bezpieczne dla ograniczeń integralności między tabelami?

Odpowiedź brzmi:wyzwalacze nie są bezpieczne .

Okazuje się, że wyzwalacz tak naprawdę nie widzi niezatwierdzonych zmian dokonanych w innych transakcjach i przechodzi bez błędu. Można to zademonstrować w ten sposób

Transakcja 1:

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

Transakcja 2:

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

Obie transakcje:

COMMIT;

Teraz plays_in will zawiera oba wstawione rekordy, nawet jeśli A i B zostały wykonane w jednej transakcji, wyzwalacz wygeneruje błąd.

Całe przykładowe źródła można znaleźć tutaj



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. json_encode nic nie zwraca

  2. Popraw zapytanie SQL INSERT, aby uniknąć wstrzyknięć sql

  3. Czy mysqldump niezawodnie obsługuje dane binarne?

  4. Jak Kupony WooCommerce są przechowywane w bazie danych?

  5. Konwertuj DateTime w C# na format rrrr-MM-dd i zapisz go w MySql DateTime Field