一个包含多个TIMESTAMP列的Mysql表

Jos*_*son 61 mysql timestamp

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

我知道,如果你有一个TIMESTAMPDEFAULT CURRENT_TIMESTAMP或一个ON UPDATE CURRENT_TIMESTAMP你不能有另一TIMESTAMP列.您可以使用,DATETIME但我知道,在触发器之外无法默认它.

我发现你可以有多个TIMESTAMP,每个都没有DEFAULT或者在创建记录时ON UPDATE插入NULL,导致每个列都有当前的时间戳.从那时起,第一列将自动更新.

这很有效,但它给我带来了一种有趣的感觉.像这样可能是一个错误,它可以随时修补.如果这是它应该工作的方式那么就是这样.我会快乐地继续前行.任何人都可以告诉我这是否是最好的方法,或者我应该使用触发器?

Mar*_*c B 39

它在MySQL文档中有记录:

此外,您可以通过为任何TIMESTAMP列分配NULL值来初始化或更新任何TIMESTAMP列,除非已使用NULL属性定义允许NULL值.

http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

  • 使用MySQL 5.6.5,可以在一个表中独立控制多个时间戳,因此规则已经改变. (15认同)

San*_*ari 35

5.6.1之前的MySQL版本不允许TIMESTAMP在同一个表中使用两列,除非您正确地注意到默认值并允许null.

MySQL 5.6.+允许TIMESTAMP表中的两列或更多列.

更多信息:http://shankargopal.blogspot.in/2013/03/mysql-566-timestamp-columns-and-default.html


小智 5

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);
Run Code Online (Sandbox Code Playgroud)

请注意,ts1 TIMESTAMP 列是 DEFAULT,值为 0,ts2 TIMESTAMP 列是 DEFAULT,值为 CURRENT_TIMESTAMP。更多信息在这里http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html