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

Мога ли да използвам транзакционна способност в MySQL тригер

Да, можете, но как ще го направите зависи от вашата версия.

На първо място, тригерите сами по себе си са транзакционни; във вашата ситуация имате тригер за вмъкване, който изпълнява още две вмъквания. Ако едно от тях се провали, ще получите желания ефект.

Помислете за следния пример:

CREATE TABLE a (colA INT);
CREATE TABLE b (colB INT);
CREATE TABLE c (colC INT);
delimiter :
CREATE TRIGGER testtrig BEFORE INSERT ON a
  FOR EACH ROW BEGIN
    INSERT INTO b(colB) VALUES(NEW.colA);
    INSERT INTO c(banana) VALUES (NEW.colA); -- note the faulty column name
END;:
delimiter ;

Сега, когато стартирам вмъкване, което не успее, това се случва:

mysql> INSERT INTO a VALUES (5);
ERROR 1054 (42S22): Unknown column 'banana' in 'field list'
mysql> SELECT * FROM a;
Empty set (0.00 sec)

Това съответства на желания от вас резултат.

По-общо казано, ако имате логика, която можете да използвате, за да потвърдите данните си, преди да опитате вмъкването, можете да провалите задействането по различни начини:

  • В MySQL 5.5 можете да използвате SIGNAL механизъм за издигане на грешка от спусъка ви, като по този начин причинява неуспех на цялото вмъкване.
  • Преди MySQL 5.5 можете да генерирате умишлена грешка, за да провалите задействането.

Предполагам, че използвате 5.0 от връзката във вашия въпрос, така че ако трябва, можете да извършите умишлена грешка, например умишлено вмъкване в невалидна колона, за да не успеете да задействате. Въпреки това ситуацията, която описвате във вашия въпрос, вече се обработва транзакционно, както е описано в началото на моя отговор.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да инсталирате dbWatch за наблюдение на производителността на MySQL в Linux

  2. задайте пътя към класа, за да се свържете между mysql и jdbc

  3. Изтрийте ред в mysql и свързан от папката

  4. ПОКАЖЕТЕ ТАБЛИЦИ в MySQL

  5. Как да изчислим времето на SQL заявка?