我有以下表模式;
CREATE TABLE `db1`.`sms_queue` ( `Id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `Message` VARCHAR(160) NOT NULL DEFAULT 'Unknown Message Error', `CurrentState` VARCHAR(10) NOT NULL DEFAULT 'None', `Phone` VARCHAR(14) DEFAULT NULL, `Created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `LastUpdated` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP, `TriesLeft` tinyint NOT NULL DEFAULT 3, PRIMARY KEY (`Id`) ) ENGINE = InnoDB;
失败并显示以下错误:
ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause.
我的问题是,我可以同时拥有这两个领域吗?还是我必须在每次交易期间手动设置LastUpdated字段?
从 MySQL 5.5 文档中:
表中的一个TIMESTAMP列可以将当前时间戳记作为初始化该列的默认值,作为自动更新值或同时作为两者。 当前时间戳不能是一列的默认值,而另一列的自动更新值是不可能的。
MySQL 5.6.5中的 更改:
以前,每个表最多可以自动将TIMESTAMP列初始化或更新为当前日期和时间。 此限制已解除。 任何TIMESTAMP列定义都可以具有DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP子句的任意组合。此外,这些子句现在可以与DATETIME列定义一起使用。有关更多信息,请参见TIMESTAMP和DATETIME的自动初始化和更新。