我尝试在约束测试中使用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(最新版本)中运行它。
答案 0 :(得分:0)
确保使用MyISAM存储引擎创建表logs
。
如果表使用InnoDB存储引擎,则在引发错误(SQLSTATE>'02')时,由触发器执行的INSERT将回滚。 (也就是说,触发器中的INSERT不会作为自主事务执行,它会终止,就像引发异常时调用语句终止一样。)