我有一个表模式定义为:
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。但这没有发生。首次创建的值永远不会更新。
我需要在表架构中进行更改,但是我不知道是什么。
答案 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`);