描述:
mysql表里面都有创建时间字段和更新时间字段
但是mysql数据库只允许一个字段用timestamp
所以给更新字段添加如下触发器。亲测有效!!!
我们尝试以下几个语句:
CREATE TABLE temp1
(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(10),
DataChange_CreatedTime timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE temp2
(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(10),
DataChange_CreatedTime timestamp NULL DEFAULT CURRENT_TIMESTAMP,
DataChange_LastTime timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
发现temp1通过;temp2失败:
测试不通过。报ERROR 1293 (HY000)错误。(完整错误信息:ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause)
建表的时候只能存在一个字段为 TIMESTAMP 属性,所以:
CREATE TABLE temp2
(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(10),
DataChange_CreatedTime timestamp NULL DEFAULT CURRENT_TIMESTAMP,
DataChange_LastTime timestamp NULL DEFAULT '0000-00-00 00:00:00'
);
– 添加触发器
CREATE TRIGGER `update_interface_temp2_trigger`
BEFORE
UPDATE ON `temp2`
FOR EACH ROW
SET NEW.`DataChange_LastTime` = NOW();
用于对触发器语句各个字段的理解。
CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt
其中:
trigger_name:标识触发器名称,用户自行指定;
trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;
trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。