尽管提供了值,MySQL 8.0.3 更新查询仍出现空约束违规异常

问题描述 投票:0回答:1

问题: 我最近将 MySQL 数据库从版本 5.7 迁移到 8.0.3,并且在更新查询期间遇到了空约束违规问题。数据库在严格模式关闭的情况下运行。

背景: 我有一个插入查询,该查询插入的数据由于缺少必填字段而带有警告。我收到的警告是“错误代码:1364 字段‘callback_received’没有默认值。”这是预期的,因为数据库没有在严格模式下运行,所以它允许插入数据,即使是 NULL。

桌子

CREATE TABLE `order` (
  `order_id` INT NOT NULL AUTO_INCREMENT, 
  `order_code` VARCHAR(255) DEFAULT NULL 
  `member_id` INT DEFAULT NULL, 
  `order_date` TIMESTAMP NULL, 
  `callback_received` INT DEFAULT NOT NULL COMMENT '1 - Yes  2 - No'
  PRIMARY KEY (`order_id`), 
  KEY `index_OrderCode` (`order_code`), 
  KEY `index_MemberID` (`member_id`) 
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1

插入

INSERT INTO `order`(order_code,member_id,order_date) VALUES ('ORDCODE001',1000,NOW());

更新

UPDATE `order`
SET `callback_received` WHERE order_code = '05917A89'

触发 有一个触发器 (order_generate_unique_code) 可设置唯一的订单代码。

CREATE TRIGGER `order_generate_unique_code` BEFORE INSERT ON `order` FOR EACH ROW BEGIN SET new.order_code = get_unique_code(); END; $$ -- get_unique_code function having simple logic to generate unique string.

问题: 尽管在更新语句中为“callback_received”提供了一个值,但我在执行过程中遇到了空约束错误:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'callback_received' cannot be null

我很欣赏任何关于更新过程中为什么会发生这种空约束冲突的见解,尤其是在迁移到 MySQL 8.0.3 之后。

mysql amazon-rds
1个回答
0
投票

在 MySQL 8.0.3 中,严格模式下默认包含 no_auto_value_on_zero 。 所以你需要修复更新集部分。 SET

callback_received
= 1 可能会修复它

© www.soinside.com 2019 - 2024. All rights reserved.