是這樣的。從資料庫MYSQL.innodb中讀取一條資料,然后進行相應操作A,回寫這條資料到資料庫,因為操作A涉及時間較長,并且會需要其他資料庫操作支持,這樣資料庫加鎖容易造成沖突,請問該如何進行設計呢?
uj5u.com熱心網友回復:
設計程式時,一個事務從加鎖到提交,盡可能短的時間,中間不能有互動性操作,否則容易造成沖突。所以設計程式時,盡量用樂觀鎖(百度一下)。大概是:第一次讀取資料時不加鎖,互動性操作后,提交資料時再加鎖,然后比較資料庫當前值和第一次獲取的舊值是否一致,若一致,說明資料在你第一次讀取后未修改,否則被人修改,無法提交。
select .* into 舊值 where id=xxx
。。。。互動性操作。。。。
提交時:
start transaction
select * into 當前值 where id=xxx for update
if 舊值<>當前值 then
-- 此記錄在你修改的時候,它人已經修改
rollback
end if
update .... set xxx=新值 where id=xxx
commit
需要比較的欄位看你業務需求,一般是重要欄位,有的資料庫有版本號概念(如postgresql),可以用版本號來比較。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/277878.html
標籤:MySQL
上一篇:ansys apdl 模態分析
下一篇:matlab仿真時出現State derivatives returned by S-function 'mysfunction1' in 'esc1/S-Fu
