是否可以在MySQL表中定义一个时间戳列,每次修改同一行中的字段时,该列都会自动更新?理想情况下,此列最初应设置为插入行的时间。
干杯, 唐
答案 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工作,所以你需要验证这一点。