mysql - 如何使触发器的 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 选项卡变得混乱,还是什么?
解决方案
如果您只想更新您需要遵循的值。
你不能使用没有 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//
推荐阅读
- javascript - 如何在作为样式组件创建的自定义 React 模态中检测“onClickOutside”和“onEscapeKeyPress”
- microsoft-graph-api - 缺少网络挂钩通知消息
- node.js - 什么是 cp .env.local env 以及如何使用它?
- r - 无法在我的 PCA 中估算缺失值
- url - 类型“Microsoft.Dynamics.CRM.entity”的属性“字段”不是导航属性或复杂属性。只能展开导航属性
- python - Django rest框架中的自定义字段选择错误
- mysql - 减少 Google Cloud SQL 中的内存使用量
- vb.net - 如何分配回车键?
- windows - 定义适用于 Windows 和 Linux(Windows bash 或 Cygwin)的通用别名?
- java - 对于 Set 类型,of() 方法是未定义的