sql

时间:2016-04-25 22:26:21

标签: mysql sql database

在MySQL中创建数据库表。我创建了两个字段来获取时间戳。

created_at          timestamp default '0000-00-00 00:00:00',
updated_at          timestamp default now() on update now(),

当我更新数据库时,两个字段都更新为当前时间戳。有关如何防止这种情况发生的任何想法?我更新时没有提供'created_at'字段 - 我还为updated_at字段提供'null'以自动更新。

2 个答案:

答案 0 :(得分:0)

根据MySQL的版本,您应该能够在updated_at字段中使用以下内容作为默认值:

UPDATE CURRENT_TIMESTAMP上的CURRENT_TIMESTAMP

您的created_at字段应该只有CURRENT_TIMESTAMP作为默认值。

我还要将两者都设置为数据类型datetime而不是timestamp。

答案 1 :(得分:0)

时间戳初始化在mysql中可能是一个丑陋的野兽!

根据下面的提交,你有mysql v5.6.4或更早版本:

  

我无法在没有出现错误的情况下声明两个current_timestamps - 虽然它的默认值为0 - 它在创建时生成当前时间戳(没有我加入时间戳) - Spencer Rohan

当您插入/更新记录时,可以将单个时间戳字段初始化和/或更新为当前时间戳。在早期版本中,这必须是表中的第一个时间戳字段。

我只是将created_at设置为可为空的列,默认值为null,因为根据timestamp initialization上的mysql文档:

  

换句话说,定义为允许NULL值的TIMESTAMP列仅在其定义包含DEFAULT CURRENT_TIMESTAMP

时自动初始化

通过将默认值更改为null,可以解决零日期和各种sql模式下可能遇到的任何问题。

created_at          timestamp null default null,