2012-10-11 79 views
0

只是好奇,如果知道 - 我們需要做一個有條件更新的表,那麼這是最好的approach-MySQL:直接更新或選擇條件更新之前?

直接做一個更新或檢查現有的更新之前的條目。

function doDirectUpdate() 
{ 
    // UPDATE table WHERE condn 
} 

OR

function doCheckAndUpdate() 
{ 
    // SELECT COUNT(id) AS exist FROM table WHERE condn 
    if(id exists) 
    { 
     // UPDATE table WHERE condn 
    } 
    else 
    { 
     echo 'No matching entry'; 
    } 
} 
+0

沒有答案提供幫助您找出採取哪種方法? –

+0

但是想知道關於表現的答案。如果我們考慮一個包含數百萬數據的表格,第二種方法對於現有的標識符會花費兩倍的時間。 –

+1

如果有任何行存在,而不是隻更新匹配的行。您應該執行選擇的唯一時間是如果您有其他邏輯指出如果有超過X匹配的行不更新。由於UPDATE返回更新的行數,因此匹配,您應該獲取該返回值以確定是否需要echo「無匹配條目」。 –

回答

1

人們不應同時執行SELECT,然後有條件UPDATE,簡單地以顯示匹配的行數 - 匹配行的或缺乏。您應該執行SELECT的唯一時間是如果您有其他邏輯指出,如果存在多於X個匹配行,則不會更新。

UPDATE返回已更新並因此匹配的行數。您應該從UPDATE獲取返回值,然後提示是否沒有匹配的條目。

function doUpdateAndAlertIfNotMatched() 
{ 
    numberOfRowsUpdated = UPDATE table WHERE condn; 
    if(numberOfRowsUpdated == 0) 
    { 
     echo 'No matching entry'; 
    } 
} 

參考:http://dev.mysql.com/doc/refman/5.0/en/update.html#id844302