mysql - 只有一个 Mysql CURRENT_TIMESTAMP 的解决方法

标签 mysql timestamp

因此 MySQL 将只允许单个字段使用 CURRENT_TIMESTAMP 作为默认值。我最近(意外地)按照说明 here 发现了解决此问题的方法.

基本上,创建一个表 myTable,它有一个 Timestamp 列 (ts1),它使用 CURRENT_TIMESTAMP 作为default,还有一个默认为0的(ts2)。然后运行

ALTER TABLE myTable ALTER COLUMN ts2 DROP DEFAULT

执行此操作后,ts2 将默认为 CURRENT_TIMESTAMPts1 也是如此。

谁能解释一下幕后发生的事情?这最终会导致问题和破坏吗?

最佳答案

行为并不像看起来那么可怕。

In addition, you can initialize or update any TIMESTAMP column to the current date and time by assigning it a NULL value, unless it has been defined with the NULL attribute to permit NULL values.

通过从 TIMESTAMP(即 NOT NULL)中删除默认“0”,您将插入当前时间戳而不是全零占位符。

据推测,您的插入是在列列表中按名称指定时间戳列,并且您在那里显式插入一个 NULL,除了在未完全提供的情况下触发记录的行为外,什么也没有触发-随心所欲的专栏。所以,不,不要使用这个。

我说“大概”是因为如果我没有明确列出该列,我会得到这个:

mysql> show warnings;
+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1364 | Field 'ts2' doesn't have a default value |
+---------+------+------------------------------------------+
1 row in set (0.00 sec)

...我的 NOT NULL(无默认值)第二个时间戳初始化为全 0 的值。

如果您不这样做,那么我很想知道您的特定 MySQL 服务器版本。

无论如何,如果您需要更灵活的时间戳,请升级到 MySQL 5.6。取消了对每个表的单个自动时间戳列的限制,并且时间戳列还支持可选的毫秒和微秒粒度。

关于mysql - 只有一个 Mysql CURRENT_TIMESTAMP 的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19147091/

相关文章:

mysql - 在MySQL中形成子查询

php - 内存不足错误可能是由数据库大小引起的吗?

mysql - 导入数据库 phpMyAdmin - 错误格式参数不正确

java - 与日历的毫秒时差太大

Postgresql 使用时区 UTC 创建表字段名时间戳

mysql - 如何比较where子句中的时间戳

mysql - 如何组合两个更新查询(MySQL)

mysql - Magento 重新索引类别平面数据不起作用

sql - 使用 REPLACE INTO 更新表中的时间戳

java - 为什么从 MySQL 数据库存储和检索的时间戳在 System.currentTimeMillis 中查找 "shifted"?