我的编程空间,编程开发者的网络收藏夹
学习永远不晚

sql语句 update字段null不能用is null问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

sql语句 update字段null不能用is null问题

sql语句 update字段null不能用is null

update字段为 null 值时,

要用 

set column = null,

而不是

set column is null

✖ UPDATE tableA set 字段a is null WHERE字段b = 条件; 

例:

mysql> UPDATE t SET col3 is null WHERE col1 = 'a';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'is null WHERE col1 = 'a'' at line 1

〇 UPDATE tableA set 字段a = null WHERE字段b = 条件;

例:

mysql> UPDATE t SET col3 =  null WHERE col1 = 'a';
Query OK, 1 row affected (0.03 sec)

update更新数据时null字段是否更新进数据库总结

情况一:不需要更新进数据库

方法1:直接用sql语句方式,需要更新哪个字段就set xxclounm 即可

方法2:使用myBATis带的方法 updateById(Entry entry),传入entry对象只设置需要更新字段即可。

解析:mybatis-plus在update时对null字段有三种处理策略分别是:

  • IGNORED:0 忽略
  • NOT_NULL:1 非 NULL,默认策略
  • NOT_EMPTY:2 非空

默认策略是忽略null字段,所以只需要将entry中不需要更新的字段不做处理即可。注意:如果entry中字段设置为空字符串" " 则会更新进数据库

方法3:使用updateWapper,其实和方法2原理一样 如下例子只更新age字段 ,同样受更新策略影响:

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("name","rhb");
User user = new User();
user.setAge(18);
userMapper.update(user, updateWrapper);

情况二:需要更新进数据库 (推荐方法3)

方法1:直接用sql语句方式,需要更新哪个字段就set xxclounm 即可

方法2:使用mybatis带的方法 updateById(Entry entry),传入entry对象只设置需要更新字段即可。另外在entry类中需要更新null的字段上加上注解updateStrategy 如下面例子:

  
  @TableField(value = "UNIT", updateStrategy = FieldStrategy.IGNORED)
  private String unit;

或者设置全局更新策略(按需要设置单个字段或者全局)

# yml配置
mybatis-plus:
 global-config:
  db-config:
   field-strategy: not_empty

方法3:使用updateWapper,不受更新策略影响。推荐此方法,设置完策略后别人在不知情情况下可能会在不想设置null时将你设置的字段更新为空

LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(User::getName, "rhb").set(User::getAge, null);
Integer rows = userMapper.update(null, lambdaUpdateWrapper);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

sql语句 update字段null不能用is null问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录