2014-10-16 125 views
0

我试图创建一个触发器来更新行更新时的last_modified字段。创建上次修改的SQL触发器

这是我曾尝试:

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

原来我使用的MySQL Workbench的版本(6.0xxx)有一个bug,它触发了触发器。我更新到6.2xxx。

这是第一个问题。

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

在触发器主体,可以参考列在主题表 (该表与触发器关联)通过使用别名OLD和 NEW。 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; 

公告不存在USEDELIMITER声明?这是因为新版本的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;$$