我将表模式定义为:
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。但事实并非如此。第一次创建的值永远不会更新。
我需要在表模式中更改一些内容,但我不知道是什么。
1条答案
按热度按时间pftdvrlh1#
第一次插入后创建的值永远不会更新,因为下一次插入根本不会更新行的任何字段。因为,数据库行中没有发生任何更改,所以
updated_at
现场。如果您只想测试updatetimestamp特性,您可以用一个或多个字段修改表,然后再试一次。
下面的插入首先将状态设置为1,然后将其更新为2。由于行字段的实际更新正在进行,因此
updated_at
也会改变。