MySQL 5.5 Alter Table TimeStamp默认为Current Value,但它被设置为0

时间:2015-04-09 18:43:49

标签: mysql timestamp alter-table alter

我正在尝试向表中添加last_updated列,其中包含预先存在的数据。执行ALTER TABLE语句后,我希望所有现有数据的last_updated列都设置为CURRENT_TIMESTAMP

ALTER TABLE TableName
ADD COLUMN last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 
ON UPDATE CURRENT_TIMESTAMP

但是,对于所有预先存在的行,该值设置为0000-00-00 00:00:00。按预期使用CURRENT_TIMESTAMP创建任何后续插入。

我正在使用MySQL 5.5。我的期望在这里不正确吗?或者我做错了什么?

1 个答案:

答案 0 :(得分:0)

嗯,这是一个旧版本的错误Bug #68040: ALTER TABLE ADD COLUMN TIMESTAMP DEFAULT CURRENT_TIMESTAMP still inserts zero,已从版本5.6.11 Changes in MySQL 5.6.11 (04/18/2013)解决。

在5.5中,使用13.5 SQL Syntax for Prepared Statements可以避免出现更多代码的问题。

示例:

SET @`ddl` := CONCAT('ALTER TABLE `TableName`
                   ADD COLUMN `last_updated` TIMESTAMP NOT NULL
                   DEFAULT \'', CURRENT_TIMESTAMP(), '\'
                   ON UPDATE CURRENT_TIMESTAMP;');
PREPARE `stmt` FROM @`ddl`;
EXECUTE `stmt`;
DEALLOCATE PREPARE `stmt`;

ALTER TABLE `TableName`
MODIFY COLUMN `last_updated` TIMESTAMP NOT NULL
DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP;

SQL Fiddle demo