在同一触发器中查询和发出信号?

时间:2018-08-16 16:47:47

标签: mysql triggers

我尝试在约束测试中使用MySql(5.7.21)中的触发器创建一个日志系统:

CREATE TRIGGER `before_insert_grp` 
BEFORE INSERT ON `grp`
FOR EACH ROW 
BEGIN
IF 
     NEW.grp_n_entree > 50
THEN        
   INSERT INTO logs (logs_d_date, logs_v_message)  
      VALUES (NOW(), 'Entrées supérieures à 50'); 

    SIGNAL SQLSTATE '45000' 
   SET MESSAGE_TEXT = 'Entrées supérieures à 50';
END IF;
END;

它运行信号,但不运行插入查询到日志表中。我添加了SIGNAL命令,因为触发器中的查询不起作用:不能在日志表中插入,而要在grp表中插入。

有什么主意吗?谢谢。

PS:我在PhpMyAdmin(最新版本)中运行它。

1 个答案:

答案 0 :(得分:0)

确保使用MyISAM存储引擎创建表logs

如果表使用InnoDB存储引擎,则在引发错误(SQLSTATE>'02')时,由触发器执行的INSERT将回滚。 (也就是说,触发器中的INSERT不会作为自主事务执行,它会终止,就像引发异常时调用语句终止一样。)