MySQL执行UPDATE更新字段为另一字段值的语句不生效问题
SQL更新语句未生效原因解析
核心问题
你的语句中WHERE user_stock1 = NULL的条件永远无法匹配到任何行。
SQL规范明确规定:任何值与NULL进行=、!=、>、<等普通比较运算,返回结果都是UNKNOWN,而WHERE条件只会执行返回结果为TRUE的行,所以这条更新语句不会命中任何数据,自然没有更新效果。
修复方案
将=替换为专门用于NULL值判断的IS NULL运算符即可,修改后的正确语句如下:
UPDATE user_stock SET user_stock1 = user_stock2 WHERE user_stock1 IS NULL AND user_id = 'mike';
补充说明
- 即便是
NULL = NULL的等值判断,返回结果也是UNKNOWN,只有IS NULL可以正确识别值为NULL的记录 - 部分数据库支持
IS NOT DISTINCT FROM语法实现NULL的等值匹配,但IS NULL是所有SQL数据库都兼容的通用写法,优先推荐使用
内容的提问来源于stack exchange,提问作者M Shakespeare
相关产品推荐
相关产品推荐

