MySQL-不更新updated_at列

时间:2018-07-09 12:08:29

标签: mysql

我有一个表模式定义为:

CREATE TABLE IF NOT EXISTS `updated_tables` (
  `table_name` VARCHAR(50) NOT NULL,
  `updated_at` TIMESTAMP(6)  NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  PRIMARY KEY (`table_name`),
  UNIQUE INDEX `table_name_UNIQUE` (`table_name` ASC))
  ENGINE = InnoDB;

我使用以下查询:

SELECT * FROM citadel_test.updated_tables;
INSERT INTO `updated_tables` (`table_name`) VALUES ('testone') ON DUPLICATE KEY UPDATE `table_name`=VALUES(`table_name`);

运行后,将创建条目 testone ,还会创建带有相应的 timestamp(6)的update_at。 到目前为止一切都很好。

现在,当我再次运行此查询时,我的期望是使用来自timestamp(6)的新值更新updated_at。但这没有发生。首次创建的值永远不会更新。

我需要在表架构中进行更改,但是我不知道是什么。

1 个答案:

答案 0 :(得分:1)

在第一次之后创建的值永远不会更新,因为您的下一次插入根本不会更新该行的任何字段。由于数据库row中没有任何变化,因此updated_at字段中也没有变化。

如果您只想测试更新时间戳功能,则可以再添加一个字段来修改表,然后再尝试。

CREATE TABLE IF NOT EXISTS `updated_tables` (
  `table_name` VARCHAR(50) NOT NULL,
  `status` INT(3) NOT NULL,
  `updated_at` TIMESTAMP(6)  NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  PRIMARY KEY (`table_name`),
  UNIQUE INDEX `table_name_UNIQUE` (`table_name` ASC))
  ENGINE = InnoDB;

下面的插入内容是首先将状态设置为1,然后将其更新为2。 由于实际正在更新行字段,因此您的updated_at也将被更改。

SELECT * FROM updated_tables;
INSERT INTO `updated_tables` (`table_name`, `status`) VALUES ('testone', 1) ON DUPLICATE KEY UPDATE `status`=VALUES(`status`);
INSERT INTO `updated_tables` (`table_name`, `status`) VALUES ('testone', 2) ON DUPLICATE KEY UPDATE `status`=VALUES(`status`);