我使用MySql 5.x並在我的環境中,我有一個名爲CALLS的表。鎖定查詢的選擇更新
表CALLS具有一個列狀態,該狀態需要一個枚舉{inprogress,completed}。
我想讀/表的更新是行鎖定,所以:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET AUTOCOMMIT = 0;
SELECT amount from CALLS where callId=1213 FOR UPDATE;
COMMIT
基本上我即使在情況做了FOR UPDATE,由此我只需要閱讀量,並返回。我發現這允許我確保讀取/更新不會相互干擾。不過,我被告知這會降低應用程序的併發性。
有沒有辦法實現相同的事務一致性而不會產生鎖定開銷?謝謝。
我想我終於明白什麼時候需要FOR UPDATE。如果我在修改之前查詢某些列並對檢索的值做出一些決定;那麼FOR UPDATE是適當的。例如保留我自己的自動增量表。 – ashitaka 2009-01-02 09:07:55