不更新更新的\u at列

ruarlubt  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(223)

我将表模式定义为:

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,还创建了带有适当时间戳(6)的更新的\u at。目前一切正常。
现在,当我再次运行这个查询时,我的期望是用timestamp(6)中的新值更新更新的\u at。但事实并非如此。第一次创建的值永远不会更新。
我需要在表模式中更改一些内容,但我不知道是什么。

pftdvrlh

pftdvrlh1#

第一次插入后创建的值永远不会更新,因为下一次插入根本不会更新行的任何字段。因为,数据库行中没有发生任何更改,所以 updated_at 现场。
如果您只想测试updatetimestamp特性,您可以用一个或多个字段修改表,然后再试一次。

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`);

相关问题