首页 > 解决方案 > 如何使触发器的 DDL 与触发器代码保持一致?

问题描述

我正在尝试使用以下方法在 Database Workbench (Lite,for MySQL) 中创建一个触发器:

delimiter // 
CREATE TRIGGER employeesTableInsert AFTER INSERT ON EMPLOYEES FOR EACH ROW 
SET NEW.CREATED = CURRENT_TIMESTAMP; END IF;//

但是,当我尝试创建新触发器时,我得到了这个错误消息:

在此处输入图像描述

这看起来很奇怪;我查看了 Database Workbench 中的 DDL 选项卡,它有:

在此处输入图像描述

为什么它在(只读)DDL 中将我的触发器代码加倍和修改?

如开头所示,我的触发器代码只包含上面显示的内容:

在此处输入图像描述

那么是我的代码有问题,还是因为 DDL 选项卡被混淆了?还是我的代码导致 DDL 选项卡变得混乱,还是什么?

标签: mysqltriggers

解决方案


如果您只想更新您需要遵循的值。

你不能使用没有 BEGIN 和 END 的 SET,它不是一个查询。

我想知道为什么你的代码中有一个 END IF

编辑我还将您的 TRIGGER 更改为 BEFORE INSERT,因为在那里您可以更改 NEW 列的值(请参阅 Bill Karwin 评论)

实际上您不需要触发器,请参阅手册

DELIMITER //
CREATE TRIGGER employeesTableInsert BEFORE INSERT ON EMPLOYEES 
FOR EACH ROW 
BEGIN
    SET NEW.CREATED = CURRENT_TIMESTAMP;
END//

推荐阅读