【问题标题】:MySQL - not updating the updated_at columnMySQL - 不更新 updated_at 列
【发布时间】:2018-07-09 20:27:06
【问题描述】:

我有一个表模式定义为:

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) 的 updated_at。 到目前为止一切顺利。

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

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

【问题讨论】:

  • 试试这个 - updated_at TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  • 仍然不更新 timestamp(6) 字段。
  • TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 这应该只在更新查询发生时起作用
  • 删除 TIMESTAMP 长度并尝试。它会工作的
  • 我需要这些值,因为这是缓存表。此外,简单地删除它并不能解决问题。

标签: mysql


【解决方案1】:

第一次之后创建的值永远不会更新,因为您的下一次插入根本不会更新该行的任何字段。由于数据库行没有发生变化,所以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`);

【讨论】:

  • 希望在不引入其他领域的情况下有另一种方式。
  • 您可以为状态设置默认值,例如 1。并更改插入如下:INSERT INTO updated_tables (table_name) VALUES ('testone') ON DUPLICATE KEY UPDATE status= -status;
猜你喜欢
  • 1970-01-01
  • 2021-05-19
  • 2019-06-11
  • 2014-06-01
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多