Mysql 创建上次修改的SQL触发器

Mysql 创建上次修改的SQL触发器,mysql,sql,database-design,syntax,Mysql,Sql,Database Design,Syntax,我正在尝试创建一个触发器,以便在更新行时更新上次修改的字段 这就是我尝试过的: 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(); E

我正在尝试创建一个触发器,以便在更新行时更新上次修改的字段

这就是我尝试过的:

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 workbench不允许我保存它,我假设它有问题,但我无法找出问题所在,结果是我使用的MySQL workbench版本6.0xxx中有一个bug,它严重破坏了触发器。我更新到6.2xxx

这是第一个问题

第二个问题是我在AFTER触发器中使用了NEW关键字,这是不允许的:

在触发器主体中,可以引用主题表中的列 使用别名OLD和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;$$