我想要一个包含两个TIMESTAMP
列的表。一列用于跟踪创建记录的时间,另一列用于跟踪修改记录的时间。我希望数据库处理这些值。我不希望我的应用层需要考虑它。
我知道,如果您的TIMESTAMP
列中包含DEFAULT CURRENT_TIMESTAMP
或ON UPDATE CURRENT_TIMESTAMP
,则您无法拥有其他TIMESTAMP
列。您可以使用DATETIME
,但我知道,在触发器之外无法默认它。
我发现你can have multiple TIMESTAMP
columns时没有DEFAULT
或ON UPDATE
并且在创建记录时插入NULL
,导致每个人都拥有当前时间戳。从那时起,第一列将自动更新。
这很有效,但它让我感觉很有趣。像这样可能是一个错误,它可以随时修补。如果这是它应该工作的方式那么就是这样。我会快乐地继续前行。谁能告诉我这是最好的方法,还是我应该使用触发器?
答案 0 :(得分:38)
它在MySQL文档中有记录:
此外,您可以初始化或更新任何TIMESTAMP列 除非已存在,否则通过为其指定NULL值来显示当前日期和时间 使用NULL属性定义以允许NULL值。
http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
答案 1 :(得分:35)
5.6.1之前的MySQL版本不会在同一个表中放置两个TIMESTAMP
列,除非您正确地注意到默认值并允许空值。
MySQL 5.6。+允许表格中有两个或更多TIMESTAMP
列。
更多信息:http://shankargopal.blogspot.in/2013/03/mysql-566-timestamp-columns-and-default.html
答案 2 :(得分:3)
MySQL在同一个表中允许多个TIMESTAMP列,请查看以下示例:
CREATE TABLE t1 (
ts1 TIMESTAMP DEFAULT 0,
ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t2 (
ts1 TIMESTAMP NULL,
ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t3 (
ts1 TIMESTAMP NULL DEFAULT 0,
ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP);
请注意,ts1 TIMESTAMP列为DEFAULT且VALUE为0,ts2 TIMESTAMP列为DEFAULT,值为CURRENT_TIMESTAMP。更多信息http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html