久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql如何產生死鎖的

146次閱讀
沒有評論

共計 1508 個字符,預計需要花費 4 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章將為大家詳細講解有關 mysql 如何產生死鎖的,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

mysql 中死鎖 DeadLock:是指兩個或兩個以上的進程在執行過程中, 因爭奪資源而造成的一種互相等待的現象, 若無外力作用,它們都將無法推進下去. 此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。表級鎖不會產生死鎖. 所以解決死鎖主要還是針對于最常用的 InnoDB。

死鎖的關鍵在于:兩個 (或以上) 的 Session 加鎖的順序不一致。

那么對應的解決死鎖問題的關鍵就是:讓不同的 session 加鎖有次序

案例

需求:將投資的錢拆成幾份隨機分配給借款人。

起初業務程序思路是這樣的:

投資人投資后,將金額隨機分為幾份,然后隨機從借款人表里面選幾個,然后通過一條條 select for update 去更新借款人表里面的余額等。

例如兩個用戶同時投資,A 用戶金額隨機分為 2 份,分給借款人 1,2

B 用戶金額隨機分為 2 份,分給借款人 2,1

由于加鎖的順序不一樣,死鎖當然很快就出現了。

對于這個問題的改進很簡單,直接把所有分配到的借款人直接一次鎖住就行了。

Select * from xxx where id in (xx,xx,xx) for update

在 in 里面的列表值 mysql 是會自動從小到大排序,加鎖也是一條條從小到大加的鎖

  例如(以下會話 id 為主鍵): 
Session1:
 
mysql  select * from t3 where id in (8,9) for update;
+----+--------+------+---------------------+
| id | course | name | ctime |
+----+--------+------+---------------------+
| 8 | WA | f | 2016-03-02 11:36:30 |
| 9 | JX | f | 2016-03-01 11:36:30 |
+----+--------+------+---------------------+
rows in set (0.04 sec)
 
 
Session2:
select * from t3 where id in (10,8,5) for update;
鎖等待中……
 
其實這個時候 id=10 這條記錄沒有被鎖住的,但 id= 5 的記錄已經被鎖住了,鎖的等待在 id= 8 的這里
 
Session3:
mysql  select * from t3 where id=5 for update;
 
 
Session4:
mysql  select * from t3 where id=10 for update;
+----+--------+------+---------------------+
| id | course | name | ctime |
+----+--------+------+---------------------+
| 10 | JB | g | 2016-03-10 11:45:05 |
+----+--------+------+---------------------+
row in set (0.00 sec)
 
 
在其它 session 中 id= 5 是加不了鎖的,但是 id=10 是可以加上鎖的。

關于 mysql 如何產生死鎖的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向 AI 問一下細節

丸趣 TV 網 – 提供最優質的資源集合!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-18發表,共計1508字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 如东县| 台中市| 大化| 通海县| 噶尔县| 布尔津县| 三明市| 运城市| 保定市| 清远市| 永城市| 墨竹工卡县| 昌乐县| 石楼县| 马山县| 丰镇市| 修武县| 林周县| 古交市| 铁力市| 中方县| 陇川县| 阜康市| 彰武县| 当涂县| 无棣县| 电白县| 格尔木市| 哈巴河县| 石河子市| 澄城县| 白河县| 株洲县| 诸城市| 孙吴县| 达孜县| 高邮市| 克拉玛依市| 巴南区| 南和县| 鄢陵县|