MySQL之UPDATE中的坑

之前在工作中碰到了update多表聯(lián)合更新的問題作儿,總結(jié)了這篇文章;這兩天又碰到了update中的另一個(gè)坑馋劈,就放在一起吧攻锰。
第一部分:update與join的聯(lián)合使用
1、inner join
現(xiàn)有兩張表instr_test_left和instr_test_right妓雾,表數(shù)據(jù)分別如下:
instr_test_left

image.png

instr_test_right
image.png

UPDATE instr_test_right a,instr_test_left b
SET a.`equ_catr`='2222',b.`equ_catr`='2222'
WHERE a.`id`=b.`id`

或者

UPDATE instr_test_right a
INNER JOIN instr_test_left b
ON a.`id`=b.`id`
SET a.`equ_catr`='2222',b.`equ_catr`='2222';

結(jié)果都是
left表


image.png

right表


image.png

left表和right表能匹配上的id為001,002,003娶吞,兩個(gè)表中id等于這三個(gè)值的記錄被更新。
如果加上where條件械姻,比如

left表現(xiàn)被修改為


image.png

現(xiàn)在進(jìn)行如下更新:

UPDATE instr_test_right a
INNER JOIN instr_test_left b
ON a.`id`=b.`id`
SET a.`equ_catr`='9999',b.`equ_catr`='9999'
WHERE b.`equ_catr`='5555';

或者

UPDATE instr_test_right a,instr_test_left b
SET a.`equ_catr`='9999',b.`equ_catr`='9999'
WHERE a.`id`=b.`id`
AND b.`equ_catr`='5555';

結(jié)果 :
left表


image.png

right表


image.png

對(duì)于right表來說议蟆,能夠與left表匹配上id且equ_catr字段等于5555的只有id為003 的那條記錄官紫;對(duì)于left表來說盟猖,能夠與right表匹配上且equ_catr字段等于5555的有三條id等于003俩块,equ_catr等于5555的記錄。
2欢揖、left join
現(xiàn)在right表如下


image.png

left表如下
image.png

不加where陶耍,做如下更新

UPDATE instr_test_right a
LEFT JOIN
instr_test_left b
ON a.`id`=b.`id`
SET a.`equ_catr`='7777',b.`equ_catr`='7777'

結(jié)果
left表

image.png

right表
image.png

在不加where條件的情況下,作為左連接的主表right表浸颓,無論是否能夠通過id與left表關(guān)聯(lián)上物臂,該表所有記錄的equ_catr字段都被更新成7777旺拉,因此在查詢時(shí)产上,left join的主表需要顯示該表所有的記錄棵磷,在update時(shí),left join的主表需要更新所有的記錄晋涣,而作為被關(guān)聯(lián)的表left仪媒,只有能夠匹配上的記錄(id等于001和002)被做了更新。
同理谢鹊,right join也是類似的結(jié)果算吩。
當(dāng)加上了where條件,

UPDATE instr_test_right a
LEFT JOIN
instr_test_left b
ON a.`id`=b.`id`
SET a.`equ_catr`='7777',b.`equ_catr`='7777'
WHERE b.`equ_catr`='3333'

結(jié)果
left表

image.png

right表
image.png

當(dāng)加上where條件之后佃扼,作為主表的right表偎巢,只對(duì)能夠與left表匹配上且left表的equ_catr等于3333的記錄做了更新,left表的結(jié)果與之前一樣兼耀。
第二部分:update中set和and聯(lián)合使用
之前做多字段更新的時(shí)候压昼,查了下update的語法

UPDATE table_name 
SET field1=new-value1, field2=new-value2
[WHERE Clause]

當(dāng)時(shí)就按照這個(gè)格式寫了,然后前兩天在修改以前的SQL瘤运,看到update同時(shí)更新多個(gè)字段時(shí)窍霞,第一反應(yīng)的語法是多字段中間用and連接,還以為之前的寫錯(cuò)了拯坟,但是修改之后運(yùn)行發(fā)現(xiàn)結(jié)果不對(duì)但金。
假設(shè)現(xiàn)在有這樣一個(gè)表


image.png

現(xiàn)在要把sat='好評(píng)'的score修改為95,goods_id修改為'g10'郁季,

update atest
set score=95,goods_id='g10'
where sat='好評(píng)'

結(jié)果:


image.png

顯示運(yùn)行成功冷溃,表中數(shù)據(jù)如下


image.png

修改成功,再嘗試and的寫法

update atest
set score=95 
and goods_id='g10'
where sat='好評(píng)'

結(jié)果

image.png

同樣運(yùn)行成功梦裂,但是此時(shí)表中數(shù)據(jù)為
image.png

sat='好評(píng)'的記錄中秃诵,goods_id的值未被修改,score被修改為0而不是95塞琼。可以再看兩個(gè)例子菠净,如果要修改的是user_name和score字段是什么結(jié)果

update atest
set user_name='kk' AND score=95
where sat='好評(píng)'

結(jié)果


image.png

此時(shí)報(bào)錯(cuò)'kk'不是數(shù)字類型
另一個(gè)例子

update atest
set user_name=234 AND goods_id='g10'
where sat='好評(píng)'

結(jié)果

image.png

產(chǎn)生上述結(jié)果的原因是
set和and聯(lián)合使用的時(shí)候
正確的執(zhí)行順序是先and再set

update atest
set score=(95 and goods_id='g10')
where sat='好評(píng)'

95 and goods_id='g10'這條語句的執(zhí)行結(jié)果是false,即0彪杉,而set goods_id='g10' 這條語句根本沒有執(zhí)行毅往,所以score被修改為0,而goods_id未被修改派近,此外攀唯,根據(jù)上面的運(yùn)行結(jié)果 set 字段=[value1 and 字段=vaule2],如果value1的類型不是數(shù)字型會(huì)報(bào)類型錯(cuò)誤渴丸,當(dāng)然set and的語法本身就是個(gè)坑侯嘀,不用糾結(jié)它的數(shù)據(jù)類型問題另凌。
綜上,在寫SQL的時(shí)候戒幔,有些不熟悉的語句還是查詢一下官方語法吠谢,想當(dāng)然有時(shí)候會(huì)出錯(cuò)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诗茎,一起剝皮案震驚了整個(gè)濱河市工坊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌敢订,老刑警劉巖王污,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異楚午,居然都是意外死亡昭齐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門矾柜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阱驾,“玉大人,你說我怎么就攤上這事把沼“∫祝” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵饮睬,是天一觀的道長(zhǎng)租谈。 經(jīng)常有香客問我,道長(zhǎng)捆愁,這世上最難降的妖魔是什么割去? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮昼丑,結(jié)果婚禮上呻逆,老公的妹妹穿的比我還像新娘。我一直安慰自己菩帝,他們只是感情好咖城,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呼奢,像睡著了一般宜雀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上握础,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天辐董,我揣著相機(jī)與錄音,去河邊找鬼禀综。 笑死简烘,一個(gè)胖子當(dāng)著我的面吹牛苔严,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播孤澎,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼届氢,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了亥至?” 一聲冷哼從身側(cè)響起悼沈,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤贱迟,失蹤者是張志新(化名)和其女友劉穎姐扮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衣吠,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茶敏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缚俏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惊搏。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖忧换,靈堂內(nèi)的尸體忽然破棺而出恬惯,到底是詐尸還是另有隱情,我是刑警寧澤亚茬,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布酪耳,位于F島的核電站,受9級(jí)特大地震影響刹缝,放射性物質(zhì)發(fā)生泄漏碗暗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一梢夯、第九天 我趴在偏房一處隱蔽的房頂上張望言疗。 院中可真熱鬧,春花似錦颂砸、人聲如沸噪奄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勤篮。三九已至,卻和暖如春撒蟀,著一層夾襖步出監(jiān)牢的瞬間叙谨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國打工保屯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留手负,地道東北人涤垫。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像竟终,于是被迫代替她去往敵國和親蝠猬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354