我尝试在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(最新版本)中运行这个。
1条答案
按热度按时间hmmo2u0o1#
确保table
logs
是使用myisam存储引擎创建的。如果表使用innodb存储引擎,则触发器执行的插入将在抛出错误(sqlstate>'02')时回滚(也就是说,触发器中的insert不是作为自治事务执行的,它终止的方式与抛出异常时调用语句终止的方式相同。)