是否可以在 MySQL 表中定义一个时间戳列,每次修改同一行中的字段时都会自动更新该列?理想情况下,该列最初应设置为插入行的时间。
干杯,唐
您可以像提到的其他海报一样使用时间戳列。这是可用于在其中添加列的 SQL:
ALTER TABLE `table1` ADD `lastUpdated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
这会添加一个名为“lastUpdated”的列,其默认值是当前日期/时间。当该记录更新时(假设 5 分钟后),时间戳将自动更新为当前时间。
这是时间戳列类型的默认功能。但是请注意,这种类型的格式是 yyyymmddhhmmss(所有数字,没有冒号或其他分隔符)。
编辑:上述关于格式的评论仅适用于 MySQL < 4.1 的版本...以后的版本将其格式化为DateTime
这就是我观察到的(MySql 5.7.11) -
表中的第一个 TIMESTAMP 列将当前时间戳作为默认值。因此,如果您在不提供值的情况下执行 INSERT 或 UPDATE,则该列将获得当前时间戳。
任何后续的 TIMESTAMP 列都应该有一个明确定义的默认值。如果您有两个 TIMESTAMP 列并且没有为第二列指定默认值,则在尝试创建表时会出现此错误 -
错误 1067 (42000):“COLUMN_NAME”的默认值无效
仅当默认值设置为 MySQL 时间戳时,才会设置创建或更新时间。ALTER TABLE some_table ADD when TIMESTAMP DEFAULT CURRENT_TIMESTAMP
.
否则,它就像 DateTime 字段一样工作,只是它相对于 1970/01/01 UTC,所以它是一个绝对时间点,而不像 DateTime 那样取决于特定时区。