因此 MySQL
将只允许单个字段使用 CURRENT_TIMESTAMP
作为默认值。我最近(意外地)按照说明 here 发现了解决此问题的方法.
基本上,创建一个表 myTable
,它有一个 Timestamp
列 (ts1
),它使用 CURRENT_TIMESTAMP
作为default,还有一个默认为0的(ts2
)。然后运行
ALTER TABLE myTable ALTER COLUMN ts2 DROP DEFAULT
执行此操作后,ts2
将默认为 CURRENT_TIMESTAMP
,ts1
也是如此。
谁能解释一下幕后发生的事情?这最终会导致问题和破坏吗?
最佳答案
行为并不像看起来那么可怕。
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 theNULL
attribute to permitNULL
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/