在 MySQL 中,我想要一个 TIMESTAMP
类型的表列,但它不在行更新时更新为当前时间戳。
我的表格如下简单:
CREATE TABLE `test` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`lastAccess` TIMESTAMP NOT NULL,
PRIMARY KEY (`id`)
);
然后由 MySQL 创建,如下所示:
DESCRIBE TABLE `test`;
+------------+---------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+-------------------+-----------------------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| lastAccess | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+------------+---------------------+------+-----+-------------------+-----------------------------+
如何避免默认值以及“更新时”行为?
如果重要的话,我使用 InnoDB 引擎。
MySQL版本:5.5.41-0ubuntu0.14.04.1
最佳答案
正如 Marc B 在评论中已经提到的那样,TIMESTAMP
的默认行为应该就是这样做的。
我发现,当您在表创建中设置默认值(或ALTER
)时,默认值不再是CURRENT_TIMESTAMP
(显然),而且“更新 CURRENT_TIMESTAMP”属性也被删除(有趣的是)。
CREATE TABLE `test` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`lastAccess` TIMESTAMP NOT NULL DEFAULT 0,
-- ^^^^^^^^^
PRIMARY KEY (`id`)
);
另外有趣的是,如果您设置了 DEFAULT CURRENT_TIMESTAMP
但省略了该属性,则不会设置该属性。仅当根本不提供默认值时,才会静默设置它。
关于mysql - 避免 "on update current_timestamp",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28679543/