MySql TIMESTAMP列自动更新。为什么?

时间:2015-12-18 12:41:50

标签: php mysql

我有一个用这个SQL创建的表:

CREATE TABLE `test_table` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `data` TEXT,
  `timestamp` TIMESTAMP
) CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE InnoDB;

但是当我运行SHOW CREATE TABLE test_table时,我得到:

CREATE TABLE `test_table` (
 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
 `data` text COLLATE utf8_unicode_ci,
 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

为什么默认情况下会为时间戳列分配 ON UPDATE CURRENT_TIMESTAMP ?我不知道怎么摆脱这个。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

如果您想要timestamp,则不会自动添加ON UPDATE,您必须像这样定义

CREATE TABLE `test_table` (
   ...
   `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ...

答案 1 :(得分:1)

使用日期时间字段

Should I use field 'datetime' or 'timestamp'?

  

MySQL中的时间戳通常用于跟踪记录的变化,以及   每次更改记录时都会更新。如果你想   存储您应该使用日期时间字段的特定值。

     

如果您想要决定使用UNIX时间戳还是   本机MySQL日期时间字段,使用本机格式。你可以做   MySQL中的那种计算方式(“SELECT DATE_ADD(my_datetime,   INTERVAL 1 DAY)“)并且更改值的格式很简单   你的UNIX时间戳(“SELECT UNIX_TIMESTAMP(my_datetime)”)   如果你想用PHP操作它,请查询记录。