mysql时间戳列

时间:2008-09-30 20:54:19

标签: mysql timestamp

是否可以在MySQL表中定义一个时间戳列,每次修改同一行中的字段时,该列都会自动更新?理想情况下,此列最初应设置为插入行的时间。

干杯, 唐

5 个答案:

答案 0 :(得分:38)

您可以使用timestamp列作为其他提到的海报。以下是可用于添加列的SQL:

ALTER TABLE `table1` ADD `lastUpdated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;

这会添加一个名为“lastUpdated”的列,其默认值为当前日期/时间。当该记录更新时(比如5分钟后),该时间戳将自动更新为当前时间。

答案 1 :(得分:19)

这是 timestamp 列类型的默认功能。但请注意,此类型的格式为yyyymmddhhmmss(所有数字,无冒号或其他分隔)。

编辑:以上关于格式的评论仅适用于MySQL的版本< 4.1 ...更高版本将其格式化为 DateTime

答案 2 :(得分:1)

这是我观察到的(MySql 5.7.11) -

表中的第一个TIMESTAMP列将当前时间戳作为默认值。因此,如果在不提供值的情况下执行INSERT或UPDATE,则列将获取当前时间戳。

任何后续TIMESTAMP列都应具有显式定义的默认值。如果您有两个TIMESTAMP列,并且如果没有为第二列指定默认值,则在尝试创建表时会出现此错误 -

错误1067(42000):“COLUMN_NAME”

的默认值无效

答案 3 :(得分:0)

只有在设置默认值时,才会使用创建或更新时间设置MySQL时间戳。 ALTER TABLE some_table ADD when TIMESTAMP DEFAULT CURRENT_TIMESTAMP
否则它就像DateTime字段一样,只是它相对于1970/01/01 UTC,所以它是一个绝对的时间点,不依赖于特定的时区,就像DateTime一样。

答案 4 :(得分:-1)

IIRC,创建记录时无法更改记录类型为timestamp的表中的第一列。每当更新记录时,都会设置第二列类型timestamp。反之亦然。

我没有做太多的MySQL工作,所以你需要验证这一点。