sql語句 update字段null不能用is null問題
sql語句 update字段null不能用is null
update字段為 null 值時(shí),
要用
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更新數(shù)據(jù)時(shí)null字段是否更新進(jìn)數(shù)據(jù)庫總結(jié)
情況一:不需要更新進(jìn)數(shù)據(jù)庫
方法1:直接用sql語句方式,需要更新哪個(gè)字段就set xxclounm 即可
方法2:使用mybatis帶的方法 updateById(Entry entry),傳入entry對(duì)象只設(shè)置需要更新字段即可。
解析:mybatis-plus在update時(shí)對(duì)null字段有三種處理策略分別是:
IGNORED
:0 忽略NOT_NULL
:1 非 NULL,默認(rèn)策略NOT_EMPTY
:2 非空
默認(rèn)策略是忽略null字段,所以只需要將entry中不需要更新的字段不做處理即可。注意:如果entry中字段設(shè)置為空字符串" " 則會(huì)更新進(jìn)數(shù)據(jù)庫
方法3:使用updateWapper,其實(shí)和方法2原理一樣 如下例子只更新age字段 ,同樣受更新策略影響:
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("name","rhb"); User user = new User(); user.setAge(18); userMapper.update(user, updateWrapper);
情況二:需要更新進(jìn)數(shù)據(jù)庫 (推薦方法3)
方法1:直接用sql語句方式,需要更新哪個(gè)字段就set xxclounm 即可
方法2:使用mybatis帶的方法 updateById(Entry entry),傳入entry對(duì)象只設(shè)置需要更新字段即可。另外在entry類中需要更新null的字段上加上注解updateStrategy 如下面例子:
? ? /** ? ? ?* 單位 ? ? ?*/ ? ? @TableField(value = "UNIT", updateStrategy = FieldStrategy.IGNORED) ? ? private String unit;
或者設(shè)置全局更新策略(按需要設(shè)置單個(gè)字段或者全局)
# yml配置 mybatis-plus: ? global-config: ? ? db-config: ? ? ? field-strategy: not_empty
方法3:使用updateWapper,不受更新策略影響。推薦此方法,設(shè)置完策略后別人在不知情情況下可能會(huì)在不想設(shè)置null時(shí)將你設(shè)置的字段更新為空
LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); lambdaUpdateWrapper.eq(User::getName, "rhb").set(User::getAge, null); Integer rows = userMapper.update(null, lambdaUpdateWrapper);
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySql如何查看索引并實(shí)現(xiàn)優(yōu)化
這篇文章主要介紹了MySql如何查看索引并實(shí)現(xiàn)優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12mysql百萬數(shù)據(jù)表加索引優(yōu)化的方法
在大數(shù)據(jù)時(shí)代,隨著數(shù)據(jù)量的快速增長,對(duì)數(shù)據(jù)庫的索引優(yōu)化變得尤為重要,本文主要介紹了mysql百萬數(shù)據(jù)表加索引優(yōu)化的方法,感興趣的可以了解一下2024-02-02- 從這個(gè)基本語法可以看出,最簡單的SELECT語句是SELECT select_list,實(shí)際上利用這個(gè)最簡單的SELECT語句,你也可以完成許多你期待的功能,首先你能利用它進(jìn)行MySQL所支持的任何運(yùn)算,例如:SELECT 1+1,它將返回2;其次,你也能利用它給變量賦值,而在PHP中,運(yùn)用SELECT語句的這種功能,你就可以自由地運(yùn)用MySQL的函數(shù)為PHP程序進(jìn)行各種運(yùn)算,并賦值給變量。在很多的時(shí)候,你會(huì)發(fā)現(xiàn)MySQL擁有許多比PHP更為功能強(qiáng)大的函數(shù)。2008-04-04
MySQL復(fù)制的概述、安裝、故障、技巧、工具(火丁分享)
首先主服務(wù)器把數(shù)據(jù)變化記錄到主日志,然后從服務(wù)器通過I/O線程讀取主服務(wù)器上的主日志,并且把它寫入到從服務(wù)器的中繼日志中,接著SQL線程讀取中繼日志,并且在從服務(wù)器上重放,從而實(shí)現(xiàn)MySQL復(fù)制。2011-04-04homeassistant數(shù)據(jù)存儲(chǔ)到mysql數(shù)據(jù)庫方式
這篇文章主要介紹了homeassistant數(shù)據(jù)存儲(chǔ)到mysql數(shù)據(jù)庫方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12mysql數(shù)據(jù)庫自動(dòng)添加創(chuàng)建時(shí)間及更新時(shí)間
在實(shí)際應(yīng)用中我們時(shí)常會(huì)需要用到創(chuàng)建時(shí)間和更新時(shí)間這兩個(gè)字段,下面這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫自動(dòng)添加創(chuàng)建時(shí)間及更新時(shí)間的相關(guān)資料,需要的朋友可以參考下2022-05-05