【问题标题】:confusion between DateTime and TimeStamp in MysqlMysql中DateTime和TimeStamp之间的混淆
【发布时间】:2015-04-22 03:49:58
【问题描述】:

我用的是mysql,所有表都有四个字段,

created_by varchar(128)
created_on timestamp default current_timestamp
updated_by varchar(128)
updated_on timestamp default current_timestamp

我读过关于堆栈溢出的不同答案,每次对表行执行某些操作时,默认值为current_timestamp 的字段会自动更新。但是我想created_on在新记录更新时自动插入current_timestamp,并且当这条记录在一段时间后更新时,只有updated_by字段自动更新为current_timestamp而不是created_by

【问题讨论】:

标签: php mysql datetime timestamp


【解决方案1】:
created_by varchar(128)
created_on timestamp default current_timestamp
updated_by varchar(128)
updated_on timestamp default current_timestamp ON UPDATE CURRENT_TIMESTAMP

更多信息:: http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html

【讨论】:

  • 这仅在 OP 运行 mysql 5.6 或更高版本时才有效
  • 你确定吗?从 5.0 开始应该可以使用
  • 检查5.5 documentation“不可能将当前时间戳设为一列的默认值,而另一列的自动更新值”。投票结束这个问题作为重复的顺便说一句(参见问题下方的第三条评论)
【解决方案2】:

我使用这个结构:

created_by varchar(128)
created_on timestamp  NOT NULL DEFAULT '0000-00-00 00:00:00'
updated_by varchar(128)
updated_on timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

在第一次使用INSERT INTO 时,将NOW() 用于created_on。之后修改行将始终自动更新updated_on 字段。对于UPDATE 语句,根本不需要触摸TIMESTAMP 列。 (注意:只有在确实更新了某些内容时才会更新时间戳。IE。使用现有值更新列不会修改任何内容,因此不会更新时间戳。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 2016-09-22
    • 2015-06-01
    • 2020-01-08
    相关资源
    最近更新 更多