【发布时间】:2018-07-06 14:38:25
【问题描述】:
使用 MySQL 5.6.40
这是表定义:
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;
这是查询(由 Sequalize 生成):
INSERT INTO `updated_tables` (`table_name`,`updated_at`) VALUES ('workdamnit',NULL) ON DUPLICATE KEY UPDATE `table_name`=VALUES(`table_name`), `updated_at`=VALUES(`updated_at`);
同一查询的简化形式:
INSERT INTO `updated_tables` (`table_name`,`updated_at`) VALUES ('workdamnit',NULL)
它会在表格中生成以下条目:
table_name:workdamnit
更新时间:2018-07-05 14:27:17.142494
现在问题来了。
使用 MySQL 5.6.39-登录 AWS RDS
给出这个错误: 错误代码:1048。“updated_at”列不能为空
是因为 MySQL 版本有点不同,还是和 RDS 有关系?
【问题讨论】:
-
我相信错误消息是不言自明的。您试图在不允许 NULL 值的字段中插入 NULL,该字段是 updated_at。
-
您有重复的索引。您不需要 UNIQUE_INDEX 'table_name_UNIQUE' 因为 PRIMARY KEY 已经是一个 UNIQUE 值和一个 INDEX