2013-03-02 61 views
0

這只是一個簡單的問題,但對於一個表進行更新的過程時說Personinfo例如是該接受MYSQL IFNULL正確使用

Update Person 
Set 
    FirstName = IFNULL(_FirstName, FirstName), 
    LastName = IFNULL(_LastName, LastName) 
    Where PID = _PID 

這是個好辦法做部分更新的記錄或應所有的信息都會被髮送回去嗎?

+0

你的回答對我來說很好 - 除了刪除WHERE子句之前的最後一個逗號。這假設你傳入_FirstName並且它可以作爲NULL值傳入。 – sgeddes 2013-03-02 19:00:22

+0

想知道是否建議允許它,或者如果IFNULL()可能不值得允許將null值發送回來,因爲它的性能我無法找到。 – SCFi 2013-03-02 19:03:03

回答

0

如果exp1不爲空,IFNULL將返回exp2。

我假設你想要返回一個固定的'First Name'和'Last Name'字符串,如果你傳遞給存儲過程的參數沒有設置。我通過性能表現你也在談論更新/選擇和數據碎片化的速度。

您需要問自己,無論是因爲應用程序原因您希望NULL還是固定字符串,而不是擔心性能(除非您已經遇到與此相關的性能問題)。

這確實會影響性能,但如果行大小超過限制,它應該只會引發問題 - 表的內部表示的最大行大小爲65,535字節。如果你不會超過那個,那麼固定字符串和NULL之間的性能差異是不值得考慮的。

您也可以選擇CHAR類型,因爲它始終是相同的長度,並且不會導致任何碎片。但是,你應該存儲一個空值而不是NULL。

+0

這樣做會非常感謝您的反饋 – SCFi 2013-03-02 20:23:34