我正在尝试创建一个触发器,以便在更新行时更新last_modified
字段。
这就是我的尝试:
USE `mydb`;
DELIMITER $$
DROP TRIGGER IF EXISTS mydb.products_AUPD$$
USE `mydb`$$
CREATE TRIGGER `products_AUPD` AFTER UPDATE ON products
FOR EACH ROW BEGIN
SET NEW.`last_modified` = NOW();
END;
$$
DELIMITER ;
问题是MySQL工作台不会让我保存它(我假设它有问题,但我无法找到答案)
答案 0 :(得分:0)
原来我使用的MySQL Workbench版本(6.0xxx)有一个错误,它对触发器造成了严重破坏。我更新到6.2xxx。
这是第一个问题。
第二个问题我在NEW
触发器中使用AFTER
关键字是不允许的:
在触发器主体中,您可以引用主题表中的列 (与触发器关联的表)使用别名OLD和 新。 OLD.col_name引用现有行的列 更新或删除。 NEW.col_name引用新行的列 插入或更新后的现有行。
所以我的新触发器看起来像这样:
CREATE DEFINER = CURRENT_USER TRIGGER `mydb`.`products_BEFORE_UPDATE` BEFORE UPDATE ON `products` FOR EACH ROW
BEGIN
SET NEW.`last_modified` = NOW();
END;
请注意,没有USE
或DELIMITER
声明?这是因为MySQL Workbench的新版本为您提供了此功能(包括结束分隔符$$
):
USE `mydb`;
DELIMITER $$
USE `mydb`$$
DROP TRIGGER IF EXISTS `mydb`.`products_BEFORE_INSERT` $$
USE `mydb`$$
CREATE DEFINER = CURRENT_USER TRIGGER `mydb`.`products_BEFORE_INSERT` BEFORE INSERT ON `products` FOR EACH ROW
BEGIN
SET NEW.`last_modified` = NOW();
END;$$