【问题标题】:SQL Query not working on RDSSQL 查询在 RDS 上不起作用
【发布时间】: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

标签: mysql amazon-web-services


【解决方案1】:

在创建表格期间,您在专栏中提到了以下内容: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)

希望对你有帮助

【讨论】:

  • 感谢您的回答。插入查询是由 Sequalize 生成的,这就是它复杂的原因。您的查询是正确的。但问题依然存在。
  • 你能用你的序列化代码编辑你的问题吗?
  • 你可以传递flag进行sequalize,例如:Model.find({where: {foo: undefined}, treatUndefinedAsNull: false}) not sure if insert是否允许flag。
【解决方案2】:

您正在尝试在不允许的字段上INSERT NULL。此外,该字段具有默认值。所以你可以简单地尝试:

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

【讨论】:

  • 感谢您的回答。但是,请再次阅读我的问题。行为会有所不同,具体取决于我使用它的位置。
  • @VedranMaricevic。在第一个环境中很有可能该行已经存在,因此执行更新而不是插入。在第二个环境中,该行不存在,因此插入尝试被执行并且由于我描述的原因而失败
【解决方案3】:

经过一番研究,我找到了答案。 RDS 实例默认开启严格模式,因此响应正常。虽然我的本地实例以及 EC2 上的 MySQL 实例没有使用严格模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2022-06-10
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2013-02-03
    相关资源
    最近更新 更多