2008-09-30 138 views
21

是否有可能在MySQL表中定义一个时间戳列,每当同一行中的某个字段被修改时它将自动更新?理想情况下,此列最初应设置为插入行的时间。mysql时间戳列

干杯, 唐

回答

16

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

编辑:以上关于格式的注释是唯一真正的MySQL < 4.1版本......后来的版本格式化它像一个日期时间

+3

根据MySQL 5.0文档,时间戳类型与日期时间格式相同(例如'YYYY-MM-DD HH:MM:SS')。 – 2008-09-30 20:58:41

0

IIRC,在timestamp类型的表中的第一列在创建记录时不可更改时设置。类型时间戳的第二列在记录更新时设置。或相反亦然。

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

31

您可以像提到的其他海报一样使用时间戳列。下面是SQL你可以用它来在添加列:

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

这增加了一个名为“LASTUPDATED”与当前的日期/时间的默认值列。当记录更新时(可以说5分钟后)时间戳会自动更新到当前时间。

+6

以下看起来已足够: ALTER TABLE`table1` ADD`lastUpdated` TIMESTAMP; – 2008-10-02 14:44:14

0

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

1

这是我所观察到的东西(的MySQL 5.7.11) -

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

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

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