每次更新时,MySQL CURRENT_TIMESTAMP字段都会更新

Aka*_*aka 2 php mysql timestamp

解释这个问题的最好方法是举个例子.

我有一张桌子:

CREATE TABLE `example` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data` varchar(255) DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)

结果:

   id  |  data  |       created       |       updated
 (NULL)| (NULL) |       (NULL)        |       (NULL)

然后我插入一些数据:

INSERT INTO example (
  `data`
) VALUES (
  'abc123'
)
Run Code Online (Sandbox Code Playgroud)

结果:

  id  |  data  |       created       |       updated
   1  | abc123 | 2013-01-16 13:12:16 |       (NULL)

然后我更新

UPDATE example SET 
  `data` = 'def456',
  `updated` = NOW()
WHERE id = 1
Run Code Online (Sandbox Code Playgroud)

结果:

  id  |  data  |       created       |       updated
   1  | def456 | 2013-01-16 13:16:24 | 2013-01-16 13:14:26

问题:请注意该created字段如何更新,并且正确保存更新字段的时间略有不同.我已经在同一个数据库中设置了这个示例表和其他类似的表,没有这个问题,所以我完全被它困惑了.

Jim*_*mbo 11

updated 需要是: TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

所以你的意思CREATE TABLE是:

CREATE TABLE `example` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data` varchar(255) DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)

这意味着当您UPDATE将来执行时,您将不需要传递更新变量,因为MySQL会自动为您更新它:)