亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當僅在 where 子句中指定列名時,MySQL 會更新所有行

當僅在 where 子句中指定列名時,MySQL 會更新所有行

PHP
烙印99 2023-07-01 13:01:43
我已經有一段時間沒有在 mysql 上工作了,我很驚訝地發現以下語句是有效的:UPDATE table_A SET col_a = valueWHERE id;看起來 MySQL 更新了表中的所有行。我有良好的 MSSQL 背景,我試圖理解為什么這在 MySql 中有效?另外,我在 varchar 列上運行了一個具有類似 where 子句的查詢:SELECT distinct descriptionFROM table_A where NOT description;我認為它只會返回 null 或空值。相反,它返回大量具有非空值的行。有什么想法嗎?
查看完整描述

1 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

WHERE xx將匹配計算結果為真值的任何行。由于BOOLEAN實際上是數字類型TINYINT(1),因此它的工作原理是轉換為數字,然后與零進行比較 - 任何非零數字都是真實的。(NULL是假的。)

如果你寫,那么僅對于isWHERE id = 123的行,表達式將計算為(與 相同)并且它會匹配,否則它將計算為()。id123id = 123TRUE1FALSE0

但如果你寫WHERE id,則要求id計算結果為真值。如果id是一個數字,則只有 ID 0,NULL將是假的。

但是,在 的情況下description,您有一個字符串。并且字符串首先被轉換為數字。您獲得許多結果的原因是任何以數字(非零)開頭的字符串都是匹配的,例如01234hello(轉換為非零的 1234)。檢查CONVERT(description, SIGNED)給出的內容 - 如果它非零,則它匹配。

這就是為什么在代碼中構建ANDOR查詢時,您可以通過以TRUEor 1(在這種AND情況下)或FALSEor 0(在這種OR情況下)開頭來避免專門處理零條件的情況,因為WHERE TRUE/WHERE 1是有效的(匹配所有內容),就像WHERE FALSEWHERE 0(不匹配任何內容)。WHERE 1因此,您可以通過以下方式開始并添加以下內容來構建查詢: WHERE 1、WHERE 1 AND id = 123、WHERE 1 AND id = 123 AND type = 'xy'等。


查看完整回答
反對 回復 2023-07-01
  • 1 回答
  • 0 關注
  • 134 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號