sql查询在rds上不起作用

umuewwlo  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(374)

使用MySQL5.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)

并在表中生成以下条目:
表名称:workdamnit
更新时间:2018-07-05 14:27:17.142494
现在来回答问题。
在aws-rds上使用mysql 5.6.39-log
给出此错误:错误代码:1048。“updated\u at”列不能为空
是因为mysql版本有点不同,还是和rds有关?

bfnvny8b

bfnvny8b1#

你在试着 INSERT NULL 在一个不允许的领域。此外,此字段还有一个默认值。所以你可以试着:

INSERT INTO `updated_tables` (`table_name`) VALUES ('workdamnit') ...
3pvhb19x

3pvhb19x2#

在创建表的过程中,您在列中提到了以下内容: updated_at :
不允许 NULL 如果没有提供,请使用 CURRENT_TIMESTAMP(6) 作为默认值。
因此,当您在查询中插入null时,它会给出错误。
所以,如果我明白你现在想做什么,这应该是你的问题:

INSERT INTO `updated_tables` (`table_name`) VALUES ('workdamnit')

而不是

INSERT INTO `updated_tables` (`table_name`,`updated_at`) VALUES ('workdamnit',NULL)

希望有帮助

qybjjes1

qybjjes13#

经过研究,我找到了答案。rds示例在默认情况下启用了严格模式,因此它的响应正常。而我的本地示例,以及ec2上的一个mysql示例,没有使用严格模式。

相关问题