You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 8.0.31:更新外键时旧值被覆盖为Null的问题排查

问题原因及解决方法
  • 核心问题:你的UPDATE语句没加WHERE子句限定更新范围,会修改grid_location表的所有行。
  • 错误逻辑拆解:
    拿第二次执行的语句来说,遍历grid_location每一行时,只有grid_number=3的行能让子查询里的grid_location.grid_number=3条件成立,查到Angela的ID;其他行(包括之前设置好的grid_number=2的行)的子查询因条件不匹配返回空值,导致这些行的character_id被覆盖成Null。第一次执行时其实已经存在这个问题,只是你可能没注意到其他行的变化。
  • 正确SQL写法:
    第一次更新:
    UPDATE grid_location
    SET character_id = (
        SELECT character_id
        FROM `character`
        WHERE first_name = 'Andrew' AND last_name = 'Bernard'
    )
    WHERE grid_number = 2;
    
    第二次更新:
    UPDATE grid_location
    SET character_id = (
        SELECT character_id
        FROM `character`
        WHERE first_name = 'Angela' AND last_name = 'Martin'
    )
    WHERE grid_number = 3;
    
  • 额外说明:这个问题和外键默认值、两表行数差异完全无关,纯粹是UPDATE语句的逻辑错误导致的。

内容的提问来源于stack exchange,提问作者JCam989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:10:28