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

k75qkfdt  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(290)

我尝试在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;

它在logs表中运行signal而不是insert查询。我添加了signal命令,因为触发器中的查询不起作用:没有插入到logs表中,而是插入到grp表中。
你知道吗?谢谢。
ps:我在phpmyadmin(最新版本)中运行这个。

hmmo2u0o

hmmo2u0o1#

确保table logs 是使用myisam存储引擎创建的。
如果表使用innodb存储引擎,则触发器执行的插入将在抛出错误(sqlstate>'02')时回滚(也就是说,触发器中的insert不是作为自治事务执行的,它终止的方式与抛出异常时调用语句终止的方式相同。)

相关问题