2013-01-25 33 views

回答

2

一般來說,使用try { } catch是一個好主意,用於需要在發生任何錯誤時撤銷先前操作的操作;它不僅限於數據庫語句。

也就是說,在使用數據庫時,建議使用更細化的鎖定機制,例如InnoDB等事務數據庫附帶的鎖定機制。你仍然會使用try { } catch,但以這種方式:

// start a new transaction 
$db->beginTransaction(); 
try { 
    // do stuff 
    // make the changes permament 
    $db->commit(); 
} catch (Exception $e) { 
    // roll back any changes you've made 
    $db->rollback(); 
    throw $e; 
} 

解決衝突的確切行爲由事務隔離級別,這是可以改變的,以滿足您的需求來定義。

+0

謝謝你在這裏用例子來填補這個問題的空白。 – JakeGould

+0

在我的情況下,我需要安全地執行get和寫入表,同時確保在此期間不發生併發寫入。交易是否給予這種相同的行爲,或更好地鎖定表以確保這一點? – JordanC

+0

@JordanC對此沒有簡單的答案。有時候這是糟糕的設計,有時你根本無法逃脫一個完整的桌面鎖。但我發現通常行級鎖定工作得很好。 –

相關問題