我一直在研究存儲過程一段時間了。最近我一直在想,UPDATE的工作原理。UPDATE如何工作?
我有一個while循環,我更新表中的某些行,一個接一個,直到所有相關的行都被更新。
我的同事建議我刪除while循環,只需要一條UPDATE語句。
但是,我不知道這是可能的嗎?我不知道每次執行存儲過程時哪些行將被更新。
我有表變量,它包含需要更新的所有ID的列表,並將其用作識別需要更新的行的鍵。 我可以在不使用while循環的情況下同時更新所有行嗎?
我一直在研究存儲過程一段時間了。最近我一直在想,UPDATE的工作原理。UPDATE如何工作?
我有一個while循環,我更新表中的某些行,一個接一個,直到所有相關的行都被更新。
我的同事建議我刪除while循環,只需要一條UPDATE語句。
但是,我不知道這是可能的嗎?我不知道每次執行存儲過程時哪些行將被更新。
我有表變量,它包含需要更新的所有ID的列表,並將其用作識別需要更新的行的鍵。 我可以在不使用while循環的情況下同時更新所有行嗎?
您的同事建議的內容稱爲基於集合的方法。
相反,使用while循環或逐行處理行,您可以使用Set Based方法,它在所有方面都更好,讓它成爲性能或維護。
建議您可以使用IN子句或Inner Join來更新表格,因爲您具有更新相應表格的唯一值。
UPDATE table_to_update
SET whatever_you_want_to_set
From temptable
inner join temptable on temptable.key = table_to_update.key
我希望這對你有意義。
是的。
我之前完成的一件事是在我的更新中使用join
。我知道這聽起來很奇怪,但它工作。
您還可以構建in
子句或exists
子選擇。
in
子句的一個危險是您使用的值列表是有限的。過去我遇到過一個問題,那就是我的SQL語句太長而且執行失敗。
是的,你可以。有不同的方式來做到這一點,其中之一是
UPDATE table_to_update
SET whatever_you_want_to_set
WHERE table_id IN (SELECT id FROM @tableVariable);
和你的同事有一點 - 單一大UPDATE語句一般的執行速度比單獨的小更新速度加快多。
你的同事是對的,因爲多個查詢最終可能會減慢數據庫的速度。大問題不是一個問題。 我建議你按照這篇文章中的說明,這很好地展示了UPDATE命令的強大功能:http://www.karlrixon.co.uk/writing/update-multiple-rows-with-different-values-and-a-single-sql-query/。
當然,在PHP中編寫單個查詢會使您更有可能犯錯。我建議你只是讓PHP輸出你的查詢,而不是直接把整個事情都檢查到MySQL(或者其他任何你使用的)。當然,不要爲此使用實時數據庫;)