oracle與mysql在遇到死鎖的時候都是自動檢測並處理,但是處理還是有些不同,oracle在自動檢測到死鎖後,會kill乙個會話導致的死鎖,但是不會完全回退這個事務的所有 語句,mysql會回退所有的語句。
oracle;
session a:
sql> update t1 set id=5 where id=1;
已更新 1 行。
sql> update t2 set id=6 where id=1;
update t2 set id=6 where id=1
* 第 1 行出現錯誤:
ora-00060: 等待資源時檢測到死鎖
sessionb:
sql> update t2 set id=5 where id=1;
已更新 1 行。
sql> update t1 set id=6 where id=1;–一直卡著
mysql中:
sessiona:
mysql> begin;
query ok, 0 rows affected (0.00 sec)
mysql> update t2 set id=5 where id=1;
query ok, 1 row affected (0.00 sec)
rows matched: 1 changed: 1 warnings: 0
mysql> update t1 set id=6 where id=1;
error 1213 (40001): deadlock found when trying to get lock; try restarting t
action
mysql>
sessionb:
mysql> begin;
query ok, 0 rows affected (0.00 sec)
mysql> update t1 set id=5 where id=1;
query ok, 1 row affected (0.01 sec)
rows matched: 1 changed: 1 warnings: 0
mysql> update t2 set id=6 where id=1;
query ok, 1 row affected (6.92 sec)
rows matched: 1 changed: 1 warnings: 0
看到oracle遇到了死鎖還是需要手工上去解除的。
詳解MySQL中的死鎖情況以及對死鎖的處理方法
當多個事務同時持有和請求同一資源上的鎖而產生迴圈依賴的時候就產生了死鎖。死鎖發生在事務試圖以不同的順序鎖定資源。以stockprice表上的兩個事務為例 事務1start transaction update stockprice set close 45.50 where stock id 4 a...
MySQL死鎖與優化
這段時間處理了兩個比較有意思的mysql問題,乙個死鎖的,乙個優化的,陡然發現其實自己對mysql的理解還不深入,很多執行機制也是知其然但不知其所以然,後續還需要好好惡補一下底層知識。假設有如下表結構 mysql show create table tt g 1.row table tt creat...
mysql 死鎖語句 MySQL死鎖
死鎖產生 行鎖的具體實現演算法有三種 record lock gap lock以及next key lock。record lock是專門對索引項加鎖 gap lock是對索引項之間的間隙加鎖 next key lock則是前面兩種的組合,對索引項及其之間的間隙加鎖。只在可重複讀或以上隔離級別下的特...