mysql事務鎖表注意事項

2021-09-26 08:08:40 字數 991 閱讀 6020

執行一:

begin;

update ieo_statistics set project_id = 0 where id = 1;

update ieo_statistics set project_id = 0 where id = 2;

執行二:

begin;

update ieo_statistics set project_id = 0 where id = 2;

update ieo_statistics set project_id = 0 where id = 1;

commit;

//這樣執行二會進入等待,執行一提交後執行二才會執行成功

//前提:需要操作的是同一行

//查詢不受任何影響,針對的是修改和刪除,新增的話一般很難受影響

//判斷條件是索引的話只會鎖行,如果不是則會鎖表。

一區:第一步執行:

begin;

update ieo_statistics set project_id = 0 where id = 1;

第三部執行

update ieo_statistics set project_id = 0 where id = 2;

二區:第二步執行

begin;

update ieo_statistics set project_id = 0 where id = 2;

第四步執行

update ieo_statistics set project_id = 0 where id = 1;

//這邊造成了死鎖操作,一般後端到了第四步執行缺省會報錯進行回滾。

//執行一 成功

//執行二 成功

//執行三 此操作一出,代表整個二區都要進入等待,需要等二區執行commit完才能執行(不關commit前後順序的關係)。

//執行四 死鎖出現,因為鎖行,他也需要整個一區進入等待,那麼互相等待直接變成死鎖,執行四的時候會直接丟擲錯誤,然後回滾。

事務注意事項

注意事項 1.在需要事務管理的地方加 transactional註解。transactional 註解可以被應用於介面定義和介面方法 類定義和類的 public 方法上。transactional註解只能應用到 public 可見度的方法上。如果你在 protected private 或者 pac...

mysql表設計注意事項

1 主鍵,最好使用業務主鍵,採用時間 伺服器編號 序號,進行生成,如果沒有特殊要求,直接使用資料庫自增序列值即可。主要是達到查詢效率快,不用走二級索引 2 對於業務資料,如果需要對多個字段建立索引,且這幾個字段查詢的時候都是一起作為條件的,可以設計為聯合索引。建索引的時候,將篩選力度大的屬性放前面,...

事務的注意事項

a.乙個功能是否要事務,必須納入設計 編碼考慮。不能僅僅完成了基本功能就ok。b.如果加了事務,必須做好開發環境測試 測試環境也盡量觸發異常 測試回滾 確保事務生效。c.以下列了事務使用過程的注意事項,請大家留意。1.不要在介面上宣告 transactional 而要在具體類的方法上使用 trans...