我正在使用mysql - (mysql Ver 14.12 Distrib 5.0.67,for suse-linux-gnu(x86_64))
我有一张桌子" MyTable",它有三列 - 一列" Col1"类型" varchar"和两列" UpdateTime"和" InsertTime"类型"时间戳"
我想使用InsertTime跟踪记录插入的时间,使用UpdateTime跟踪记录更新的时间。
的MySQL>描述MyTable;
| Field | Type | Null | Key | Default |
+-----------------------+--------------+------+-----+---------------------+
|Col1 | varchar(64) | YES | | NULL |
|InsertTime | timestamp | NO | | CURRENT_TIMESTAMP
|UpdateTime | timestamp | NO | | 0000-00-00 00:00:00
我有一个如下的触发器定义,可以确保在更新MyTable时,InsertTime时间戳将保留为原始创建时间戳,但UpdateTime时间戳将更新为当前时间戳
DELIMITER $$
DROP TRIGGER IF EXISTS `MyTable_UPDATE`; $$
CREATE TRIGGER `MyTable_UPDATE` BEFORE UPDATE ON MyTable
FOR EACH ROW
BEGIN
SET NEW.`UpdateTime` = CURRENT_TIMESTAMP ;
SET NEW.`InsertTime` = OLD.`InsertTime`;
END $$
DELIMITER ;
问题是当我更新" MyTable"如下
update MyTable set Col1=NULL ;
然后,InsertTime值也与UpdateTime一起设置为CURRENT_TIMESTAMP。 如果我将触发器定义更改为如下(通过删除对UpdateTime的赋值 - 这不是我想要的),这个问题就消失了(它保留了InsertTime)。
DELIMITER $$
DROP TRIGGER IF EXISTS `MyTable_UPDATE`; $$
CREATE TRIGGER `MyTable_UPDATE` BEFORE UPDATE ON MyTable
FOR EACH ROW
BEGIN
# SET NEW.`UpdateTime` = CURRENT_TIMESTAMP ;
# -- THIS DOES NOT HELP ME I WANT UpdateTime to be updated
SET NEW.`InsertTime` = OLD.`InsertTime`;
END $$
DELIMITER ;
这是一个BUG还是这种预期的行为。 我怎样才能让它发挥作用?
我尝试按如下方式执行alter table
ALTER TABLE `MyTable`
CHANGE COLUMN `UpdateTime` `UpdateTime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ;
但是这给我一个错误如下
"表定义不正确;在DEFAULT或ON UPDATE子句中只能有一个TIMESTAMP列和CURRENT_TIMESTAMP"
任何解决方案?
谢谢
Yogesh