31

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

干杯,唐

4

4 回答 4

47

您可以像提到的其他海报一样使用时间戳列。这是可用于在其中添加列的 SQL:

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

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

于 2008-09-30T21:06:43.787 回答
23

这是时间戳列类型的默认功能。但是请注意,这种类型的格式是 yyyymmddhhmmss(所有数字,没有冒号或其他分隔符)。

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

于 2008-09-30T20:56:14.530 回答
2

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

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

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

错误 1067 (42000):“COLUMN_NAME”的默认值无效

于 2016-03-14T00:38:43.627 回答
1

仅当默认值设置为 MySQL 时间戳时,才会设置创建或更新时间。ALTER TABLE some_table ADD when TIMESTAMP DEFAULT CURRENT_TIMESTAMP.
否则,它就像 DateTime 字段一样工作,只是它相对于 1970/01/01 UTC,所以它是一个绝对时间点,而不像 DateTime 那样取决于特定时区。

于 2010-11-15T22:12:48.130 回答