使用 CASE 進行 MySQL 更新:意外行為和解決方案
在 MySQL UPDATE 查詢中使用 CASE 語句時,了解其對資料。在提供的範例中,原始查詢旨在根據 id 欄位更新特定行。但是,查詢意外更新了所有 2500 萬行,並引入了 NULL 值。
此行為源自於 CASE 語句的性質。如果沒有 ELSE 子句,MySQL 會將任何缺少的條件解釋為等於 NULL。因此,所有與指定 id 值不符的行都會更新為 uid 列的 NULL。
要解決此問題並選擇性地更新特定行,同時保留其他數據,請考慮使用 ELSE 子句來提供預設值價值或維持現有價值。此外,使用 WHERE 子句指定需要更新的行。
例如,以下修改後的查詢解決了這些問題:
UPDATE `table` SET `uid` = CASE WHEN id = 1 THEN 2952 WHEN id = 2 THEN 4925 WHEN id = 3 THEN 1592 ELSE `uid` END WHERE id in (1,2,3)
此查詢現在僅更新具有 id 值的行1、2 和 3 行,其餘行不受影響。透過將 CASE 語句與 ELSE 子句和 WHERE 子句結合,您可以有效率地更新特定行,而不會無意中修改表中的其他資料。
以上是MySQL UPDATE with CASE:為什麼它會更新所有行以及如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!