所以MySQL
只允许单个字段使用CURRENT_TIMESTAMP
作为默认值。我最近(并且意外地)按照说明here找到了解决方法。
基本上,创建一个包含myTable
列(Timestamp
)的表ts1
,该列使用CURRENT_TIMESTAMP
作为默认值,另一个(ts2
)默认为0.然后运行
ALTER TABLE myTable ALTER COLUMN ts2 DROP DEFAULT
执行此操作后,ts2
将默认为CURRENT_TIMESTAMP
,ts1
也是如此。
有谁可以解释幕后发生的事情?这最终会导致问题和破坏吗?
答案 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。每个表对单个自动时间戳列的限制已被取消,时间戳列也支持可选的毫秒和微秒粒度。