MySQL中UPDATE語句裡SET後使用AND的執行過程和結果分析

JustJavaIt發表於2021-01-24

使用SQL中的UPDATE關鍵字更新多個欄位值時,SET後面的更新欄位應該使用逗號而不能用AND。雖然用AND不會報錯,但會使更新結果錯誤,下面我將通過場景來分析當我們使用AND時SQL的執行過程和為什麼更新結果只會是0/1/NULL;

場景示例

以下是場景更新前的原始查詢資料如下:

更新場景1

更新場景2

更新場景3

 更新場景4

 更新場景5

更新場景6

 問題發現

為什麼結果都為0或者為1或者為Null呢?是不是有什麼規律?

總結分析

 涉及到兩個知識點

(1)當我們SET後使用AND而不是逗號時,第一個“=”前的欄位的取值取自“=”後的邏輯運算的結果。我們拿場景1為例子:

 

(2)SQL中的空值(NULL)

SQL 中的空值( NULL )是一個特殊的值,代表了缺失/未知的資料或者不適用的情況。對於大多數的程式語言而言,邏輯運算的結果只有兩種情況:真( Ture )或者假( False )。但是對於 SQL 而言,邏輯運算結果存在三種情況:真、假或者未知( Unknown )。對於 SQL 查詢中的 WHERE 條件,只有結果為真的資料才會返回,結果為假或者未知都不會返回。因此, SQL 中的邏輯運算子 AND 、 OR 以及 NOT 的結果也存在三種情況。

AND 操作符的邏輯真值表如下:

 其餘的邏輯運算與null的結果請自行查閱相關文章。

希望本文章對您有幫助,您的轉發、點贊是我的創作動力,十分感謝。

掃描下方二維碼關注微信公眾號,您會收到更多優質文章推送。

相關文章