仅适用于一个Mysql CURRENT_TIMESTAMP的解决方法

时间:2013-10-02 21:24:32

标签: mysql timestamp

所以MySQL只允许单个字段使用CURRENT_TIMESTAMP作为默认值。我最近(并且意外地)按照说明here找到了解决方法。

基本上,创建一个包含myTable列(Timestamp)的表ts1,该列使用CURRENT_TIMESTAMP作为默认值,另一个(ts2)默认为0.然后运行

ALTER TABLE myTable ALTER COLUMN ts2 DROP DEFAULT

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

有谁可以解释幕后发生的事情?这最终会导致问题和破坏吗?

1 个答案:

答案 0 :(得分:1)

这种行为并不像看上去那样诡异。

  

此外,您可以通过为其分配NULL值来初始化或更新任何 TIMESTAMP列到当前日期和时间,除非它已使用NULL定义允许NULL值的属性。

通过从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。每个表对单个自动时间戳列的限制已被取消,时间戳列也支持可选的毫秒和微秒粒度。