首页 > 解决方案 > SQL 查询在 RDS 上不起作用

问题描述

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

它在表中生成以下条目:

表名:workdamnit

更新时间:2018-07-05 14:27:17.142494

现在的问题。

在 AWS RDS 上使用 MySQL 5.6.39-log

给出此错误: 错误代码:1048。列“updated_at”不能为空

是因为 MySQL 版本有点不同,还是与 RDS 有关系?

标签: mysqlamazon-web-services

解决方案


在创建表格期间,您在专栏中提到了以下内容updated_at::

  1. 不允许NULL
  2. 如果未提供任何内容,请使用CURRENT_TIMESTAMP(6)默认值。

因此,当您在查询中插入 NULL 时,它会给出错误。

所以,如果我理解你正在尝试做什么,这应该是你的查询:

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

代替

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

希望能帮助到你


推荐阅读