我正在设计一个小型数据库(SQLfiddle)。我正在尝试创建触发器,以便在从downtime
删除行时,匹配的历史记录行会添加到downtimeHistory
:
CREATE TRIGGER `announce`.`downtime_BEFORE_DELETE` BEFORE DELETE ON `downtime` FOR EACH ROW
BEGIN
INSERT INTO downtimeHistory (serviceName, startTime) VALUES(OLD.serviceName, OLD.startTime);
END
但是,MySQL并不关心这个触发器。它允许我创建它,它似乎正常运行,但每次执行触发器时都会抛出错误:
1 row(s) affected, 1 warning(s): 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
如果我尝试对id
或endTime
列执行某些操作,这对我有意义,但更新startTime应该无关紧要,因为它只提供默认值。
那么......为什么会抛出这个错误?我怎么阻止它?我应该忽略它吗?
答案 0 :(得分:1)
您的触发器插入到downtimeHistory表中。 id列是AUTO_INCREMENT。
错误消息告诉您不允许此组合。
INSERT INTO....
语句隐式导致设置ID值。