mysql - 避免 "on update current_timestamp"

标签 mysql innodb

在 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/

相关文章:

php - 如何使用 cron 作业将文件上传到 FTP

php - 在我的查询中摆脱联合...两个相似的选择具有一个不同的条件

php - 如何将多个表的值添加到一个数组中?

mysql - 上一次尝试在 MySql 上中断后无法创建 FULLTEXT 索引

MySql:MyISAM 与 Innodb!

MySQL数据库优化和性能: 2 tables or 3 tables?

mysql XA 提交

mysql - 我怎么知道哪个mysql用户在mysql中编辑了一个表

mysql - 添加全文索引使 MySQL 服务崩溃

javascript - Node.js mysql 查询和网络连接