我正在尝试向表中添加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。我的期望在这里不正确吗?或者我做错了什么?
答案 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;