最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中的悲觀鎖與樂觀鎖

 更新時間:2020年09月11日 10:17:14   作者:debug客棧  
這篇文章主要介紹了MySQL中悲觀鎖與樂觀鎖的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下

在關(guān)系型數(shù)據(jù)庫中,悲觀鎖與樂觀鎖是解決資源并發(fā)場景的解決方案,接下來將詳細講解🔎一下這兩個并發(fā)解決方案的實際使用及優(yōu)缺點。

首先定義一下數(shù)據(jù)庫,做一個最簡單的庫存表,如下設(shè)計:

CREATE TABLE `order_stock` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
 `oid` int(50) NOT NULL COMMENT '商品ID',
 `quantity` int(20) NOT NULL COMMENT '庫存',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

quantity代表著不同商品oid的庫存,接下來OCC及PCC使用此數(shù)據(jù)庫進行演示。

樂觀鎖 OCC

它假設(shè)多用戶并發(fā)的事務(wù)在處理時不會彼此互相影響,各事務(wù)能夠在不產(chǎn)生鎖的情況下處理各自影響的那部分數(shù)據(jù)。在提交數(shù)據(jù)更新之前,每個事務(wù)會先檢查在該事務(wù)讀取數(shù)據(jù)后,有沒有其他事務(wù)又修改了該數(shù)據(jù)。如果其他事務(wù)有更新的話,正在提交的事務(wù)會進行回滾。

即“樂觀鎖🔒”認為拿鎖的用戶多半是會成功的,因此在進行完業(yè)務(wù)操作需要實際更新數(shù)據(jù)的最后一步再去拿一下鎖就好。這樣就可以避免使用數(shù)據(jù)庫自身定義的行鎖,可以避免死鎖現(xiàn)象的產(chǎn)生。

UPDATE order_stock SET quantity = quantity - 1 WHERE oid = 1 AND quantity - 1 > 0; 

樂觀并發(fā)控制多數(shù)用于數(shù)據(jù)爭用不大、沖突較少的環(huán)境中,這種環(huán)境中,偶爾回滾事務(wù)的成本會低于讀取數(shù)據(jù)時鎖定數(shù)據(jù)的成本,因此可以獲得比其他并發(fā)控制方法更高的吞吐量。

悲觀鎖 PCC

它可以阻止一個事務(wù)以影響其他用戶的方式來修改數(shù)據(jù)。如果一個事務(wù)執(zhí)行的操作讀某行數(shù)據(jù)應(yīng)用了鎖,那只有當(dāng)這個事務(wù)把鎖釋放,其他事務(wù)才能夠執(zhí)行與該鎖沖突的操作。

這種設(shè)計采用了“一鎖🔒二查🔍三更新”模式,就是采用數(shù)據(jù)庫中自帶 select ... for update 關(guān)鍵字進行對當(dāng)前事務(wù)添加行級鎖🔒,先將要操作的數(shù)據(jù)進行鎖上,之后執(zhí)行對應(yīng)查詢數(shù)據(jù)并執(zhí)行更新操作。

BEGIN
SELECT quantity FROM order_stock WHERE oid = 1 FOR UPDATE;
UPDATE order_stock SET quantity = 2 WHERE oid = 1; 
COMMIT;

MySQL還有個問題是select ... for update語句執(zhí)行中所有掃描過的行都會被鎖上,這一點很容易造成問題。因此如果在MySQL中用悲觀鎖務(wù)必要確定走了索引,而不是全表掃描。

悲觀并發(fā)控制主要用于數(shù)據(jù)爭用激烈的環(huán)境,以及發(fā)生并發(fā)沖突時使用鎖保護數(shù)據(jù)的成本要低于回滾事務(wù)的成本的環(huán)境中。

OCC 和 PCC 優(yōu)缺點

OCC 優(yōu)點及缺點

【優(yōu)點】

  • 樂觀鎖相信事務(wù)之間的數(shù)據(jù)競爭(data race)的概率是比較小的,因此盡可能直接做下去,直到提交的時候才去鎖定,所以不會產(chǎn)生任何鎖和死鎖;
  • 可以快速響應(yīng)事務(wù),隨著并發(fā)量增加,但會出現(xiàn)大量回滾出現(xiàn);
  • 效率高,但是要控制好鎖的力度。

【缺點】

  • 如果直接簡單這么做,還是有可能會遇到不可預(yù)期的結(jié)果,例如兩個事務(wù)都讀取了數(shù)據(jù)庫的某一行,經(jīng)過修改以后寫回數(shù)據(jù)庫,這時就遇到了問題;
  • 隨著并發(fā)量增加,但會出現(xiàn)大量回滾出現(xiàn)。

PCC 優(yōu)點及缺點

【優(yōu)點】

“先取鎖再訪問”的保守策略,為數(shù)據(jù)處理的安全提供了保證;

【缺點】

  • 依賴數(shù)據(jù)庫鎖,效率低;
  • 處理加鎖的機制會讓數(shù)據(jù)庫產(chǎn)生額外的開銷,還有增加產(chǎn)生死鎖的機會;
  • 降低了并行性,一個事務(wù)如果鎖定了某行數(shù)據(jù),其他事務(wù)就必須等待該事務(wù)處理完才可以處理那行數(shù)據(jù)。

以上就是MySQL中的悲觀鎖與樂觀鎖的詳細內(nèi)容,更多關(guān)于MySQL 悲觀鎖與樂觀鎖的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深度解析MySQL 5.7之中文全文檢索

    深度解析MySQL 5.7之中文全文檢索

    InnoDB默認的全文索引parser非常合適于Latin,因為Latin是通過空格來分詞的。但對于像中文,日文和韓文來說,沒有這樣的分隔符。一個詞可以由多個字來組成,所以我們需要用不同的方式來處理。在MySQL 5.7.6中我們能使用一個新的全文索引插件來處理它們:n-gram parser。
    2016-12-12
  • MySQL核心日志與備份恢復(fù)示例詳解

    MySQL核心日志與備份恢復(fù)示例詳解

    本文介紹了MySQL二進制日志(BinaryLog)的用途、工作原理、配置方法以及使用場景,同時,文章還涵蓋了MySQL的備份與恢復(fù)技術(shù),包括全量備份、增量備份和差異備份,并分別介紹了mysqldump、mysqlimport和Xtrabackup等工具的使用方法和優(yōu)缺點,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • 在Windows環(huán)境下安裝MySQL 的教程圖解

    在Windows環(huán)境下安裝MySQL 的教程圖解

    這篇文章主要介紹了在Windows環(huán)境下安裝MySQL 的教程圖解,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • MySQL中查詢當(dāng)天數(shù)據(jù)中離時間點最近的數(shù)據(jù)(兩種方法)

    MySQL中查詢當(dāng)天數(shù)據(jù)中離時間點最近的數(shù)據(jù)(兩種方法)

    在 MySQL 中,你可以使用 ORDER BY 和 LIMIT 語句來查詢當(dāng)天數(shù)據(jù)中離指定時間最近的數(shù)據(jù),本文給大家介紹MySQL中查詢當(dāng)天數(shù)據(jù)中離時間點最近的數(shù)據(jù),感興趣的朋友一起看看吧
    2023-12-12
  • 正確理解Mysql中的列索引和多列索引

    正確理解Mysql中的列索引和多列索引

    本篇文章是對Mysql中的列索引和多列索引進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL命令無法輸入中文問題的解決方式

    MySQL命令無法輸入中文問題的解決方式

    這篇文章主要給大家介紹了關(guān)于MySQL命令無法輸入中文問題的解決方式,文中給出了詳細的解決方案,對遇到這個問題的同學(xué)有很大的幫助,需要的朋友可以參考下
    2021-08-08
  • MySql數(shù)據(jù)庫CRUD(增刪改查)操作全流程

    MySql數(shù)據(jù)庫CRUD(增刪改查)操作全流程

    CRUD是數(shù)據(jù)庫操作的核心,對應(yīng)Create(新增)、Read(查詢)、Update(修改)、Delete(刪除)四種基礎(chǔ)操作,這篇文章主要介紹了MySql數(shù)據(jù)庫CRUD(增刪改查)操作的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-01-01
  • MySQL配置文件my.ini的使用解讀

    MySQL配置文件my.ini的使用解讀

    這篇文章主要介紹了MySQL配置文件my.ini的使用解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 解決MySQL存儲時間出現(xiàn)不一致的問題

    解決MySQL存儲時間出現(xiàn)不一致的問題

    這篇文章主要介紹了解決MySQL存儲時間出現(xiàn)不一致的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • MySQL5.6基于GTID的主從復(fù)制

    MySQL5.6基于GTID的主從復(fù)制

    這篇文章主要介紹了MySQL5.6基于GTID的主從復(fù)制的相關(guān)資料,需要的朋友可以參考下
    2016-02-02

最新評論

社会| 绥宁县| 同仁县| 元阳县| 阜城县| 无棣县| 兰州市| 陆良县| 陆丰市| 洛南县| 从化市| 师宗县| 宜昌市| 册亨县| 镇巴县| 板桥市| 西盟| 清苑县| 吕梁市| 内乡县| 梅州市| 象州县| 辰溪县| 吴旗县| 正宁县| 万宁市| 武川县| 贵阳市| 乌拉特前旗| 黔南| 麻阳| 祁连县| 高邮市| 乐山市| 临邑县| 保德县| 大关县| 喀喇| 鄯善县| 扎鲁特旗| 剑河县|