Mysql
 sql >> база данни >  >> RDS >> Mysql

Безопасни ли са тригерите на базата данни за ограничения на целостта на кръстосани таблици?

Отговорът е тригерите не са безопасни .

Оказва се, че тригерът наистина не вижда необвързани промени, направени в други транзакции и преминава без грешка. Може да се демонстрира така

Транзакция 1:

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

Транзакция 2:

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

И двете транзакции:

COMMIT;

Сега plays_in ще съдържа и двата вмъкнати записа, въпреки че ако A и B бяха изпълнени в една транзакция, тригерът ще изведе грешка.

Целите примерни източници могат да бъдат намерени тук



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изявление за избор на MySQL с CASE или IF ELSEIF? Не сте сигурни как да получите резултата

  2. Кои знаци трябва да бъдат екранирани, за да се предотвратят (My)SQL инжекции?

  3. Увеличете стойността в заявката за актуализиране на MySQL

  4. Как да извлека резултати като многоизмерен масив от mySQL и PHP?

  5. Пропускайте редове за грешки, докато зареждате данни в mysql таблица от файл с разделители