避免“更新current_timestamp”

时间:2015-02-23 17:21:52

标签: mysql innodb

在MySQL中,我希望有一个类型为TIMESTAMP的表列,但 NOT 会更新到行更新的当前时间戳。

我的表格简单如下:

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

1 个答案:

答案 0 :(得分:0)

正如Marc B在评论中已经提到的那样,TIMESTAMP的默认行为应该就是这样。

我发现当您在表格创建中设置默认值(或ALTER时),默认值不再是CURRENT_TIMESTAMP(显然),,但删除属性“on update 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但省略了该属性,则不会设置该属性。只有在提供完全没有默认值时才会静默设置。