執行一:
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...