MySQL update ...set後的and寫法的邏輯

哎呀我的天吶發表於2022-08-04

正常update語句update table_name set col1=xxx,col2=xxxx,col3=xxxx,col4=xx and col5=xxxx;

一眼看上去這個SQL真腦殘了,哪個開發寫錯了寫成and,其實不然....這是MySQL中特有的腦殘寫法... ...真是腦殘


二話不說,建立測試表

mysql> create table test1 (expression varchar(100),notes varchar(100));
Query OK, 0 rows affected (0.36 sec)
mysql> insert into test1 values ('5','6');
Query OK, 1 row affected (0.02 sec)
mysql> insert into test1 values ('1121','xxxx');
Query OK, 1 row affected (0.02 sec)
mysql> insert into test1 values ('xxxx','111');
Query OK, 1 row affected (0.01 sec)

執行update set exp1='xxx' and exp2 ='mmm';

mysql> update test1 set expression='5' and notes = '6' ;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0
mysql> select * from test1;
+------------+-------+
| expression | notes |
+------------+-------+
| 1          | 6     |
| 0          | xxxx  |
| 0          | 111   |
+------------+-------+
3 rows in set (0.00 sec)

看到上方的邏輯其實是等價於如下:

mysql> update test1 set expression=(case when notes ='6' then 1 else 0 end);
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0
mysql> select * from test1;
+------------+-------+
| expression | notes |
+------------+-------+
| 1          | 6     |
| 0          | xxxx  |
| 0          | 111   |
+------------+-------+
3 rows in set (0.00 sec)

mysql中 and 是當做運算子"&&" 

則 set column1=value1 and column2=value2 等價於 set column1=(value1&&column2=value2)即setcolumn1=0或1


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-2909051/,如需轉載,請註明出處,否則將追究法律責任。

相關文章