update case when操作Column ‘XXX‘ cannot be null解决

update case when操作出现Column ‘XXX‘ cannot be null的问题解决

1、背景

在利用update case when批量更新数据的时,mysql报错Column ‘XXX‘ cannot be null。原sql为:

UPDATE 表A
SET reason =
CASE
serial_id
WHEN 17 THEN 'x'
WHEN 18 THEN 'y'
END
WHERE
id = 44

2、问题原因

表字段reason的定义是NOT NULL,执行该sql时,会先根据where条件查出待操作数据,比如筛选出3条数据,但我case when的情况只有2个,导致剩余1条数据自己未处理,被更新为null,违背了字段定义。

3、解决方式

  1. 修改字段定义,不推荐
  2. 修改sql,增加else,如:
UPDATE 表A
SET reason =
CASE
serial_id
WHEN 17 THEN 'x'
WHEN 18 THEN 'y'
ELSE reason
END
WHERE
id = 44

where筛出3条,when处理2条,剩余1条更新为原值,总共更新3条。

为防止无效更新的数量太多,必须要限制筛选数据的数量。

4、补充SQL的执行顺序

从from开始,每一步都生成一个虚拟表,并作为下一步的输入:

  • from:笛卡尔积
  • on:过滤
  • join:添加外部行
  • where:过滤
  • group by:分组
  • agg_fun:聚合计算
  • with:应用rollup或cube
  • having:过滤聚合值
  • select:选出指定列
  • distinct:去重
  • order by:排序
  • limit/offset:返回指定行
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java.sql.SQLIntegrityConstraintViolationException: Column 'buiID' cannot be null是一个数据库完整性约束错误。它表示在插入或更新数据时,buiID列的值不能为空。这意味着该列被定义为非空列,并且数据表的约束要求必须为每个记录提供一个非空值。 根据你提供的引用,错误可能是由于在postman中发送的请求参数中,buiID参数的值为空导致的。请确保在postman中正确设置了buiID参数的值,并且值不能为null。 此外,根据引用,还可能是由于数据库表定义了外键约束,并且外键关联的表中没有与buiID对应的记录。如果是这种情况,你需要确保buiID参数的值在关联表中有对应的记录。 因此,你需要检查postman中的参数设置和数据库表的定义,以确保buiID参数的值不为空,并且在关联表中有对应的记录。这样才能解决java.sql.SQLIntegrityConstraintViolationException: Column 'buiID' cannot be null的问题。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [报错 Cause: java.sql.SQLIntegrityConstraintViolationException: Columnxxxxxxxx‘ cannot be null](https://blog.csdn.net/weixin_45606985/article/details/129116193)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Caused by: java.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row:](https://download.csdn.net/download/weixin_38500572/13684759)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值