一个包含多个TIMESTAMP列的Mysql表

时间:2011-01-31 13:58:03

标签: mysql timestamp

我想要一个包含两个TIMESTAMP列的表。一列用于跟踪创建记录的时间,另一列用于跟踪修改记录的时间。我希望数据库处理这些值。我不希望我的应用层需要考虑它。

我知道,如果您的TIMESTAMP列中包含DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP,则您无法拥有其他TIMESTAMP列。您可以使用DATETIME,但我知道,在触发器之外无法默认它。

我发现你can have multiple TIMESTAMP columns时没有DEFAULTON UPDATE并且在创建记录时插入NULL,导致每个人都拥有当前时间戳。从那时起,第一列将自动更新。

这很有效,但它让我感觉很有趣。像这样可能是一个错误,它可以随时修补。如果这是它应该工作的方式那么就是这样。我会快乐地继续前行。谁能告诉我这是最好的方法,还是我应该使用触发器?

3 个答案:

答案 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