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

Mysql悲觀鎖和樂觀鎖的使用示例

 更新時(shí)間:2019年11月17日 11:07:41   作者:小星星  
這篇文章主要給大家介紹了關(guān)于Mysql悲觀鎖和樂觀鎖使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

悲觀鎖

悲觀鎖,認(rèn)為數(shù)據(jù)是悲觀的。當(dāng)我們查詢數(shù)據(jù)的時(shí)候加上鎖。防止其他線程篡改,直到對(duì)方拿到鎖,才能修改。

比如,有如下的表。status=1表示可以下單,status=2表示不可以下訂單。假如在并發(fā)的過程中有兩個(gè)用戶同時(shí)查到status=1,那么從邏輯上來說都可以去新增訂單,但是會(huì)造成商品超賣。

如下例子

CREATE TABLE `goods` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) DEFAULT NULL,
 `status` tinyint(4) DEFAULT NULL,
 `version` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4
INSERT INTO demo.goods (id, name, status, version) VALUES (1, 'test', 1, 1);

session1執(zhí)行

set autocommit=0;
begin;
select *
from goods where id=1 and goods.status=1 for update ;
update goods set status=2 where id=1;

session2執(zhí)行

begin;
select * from goods where id=1 for update;

這時(shí)候session2是阻塞的,因?yàn)殒i還在session1,所以鎖一直在等待。如果session1一直不提交,那么session2將在一定時(shí)間后超時(shí)斷開連接,并且報(bào)

(1205, ‘Lock wait timeout exceeded; try restarting transaction')錯(cuò)誤,

具體的鎖等待時(shí)間可以通過設(shè)置innodb_lock_wait_timeout參數(shù)進(jìn)行控制。

如果此時(shí)在session1中執(zhí)行commit 操作,那么session2將得到查詢結(jié)果,并把鎖交給session2。

我們還可以通過

show status like 'innodb_row_lock_%';

來進(jìn)一步查看鎖信息。

樂觀鎖

樂觀鎖不同于悲觀鎖,樂觀鎖是通過自身的程序?qū)崿F(xiàn),而不是mySql自身實(shí)現(xiàn)。

樂觀鎖查詢的時(shí)不上鎖,只有在更新的時(shí)候檢查版本號(hào)。

比如我們查詢到goods表中version 為1 那么在更新這個(gè)表的時(shí)候Sql將是

select * from goods where id=1;
update goods set status=2,version=version+1 where id=1 and version=1;

這里的version是查詢時(shí)候的版本號(hào),每次更改將會(huì)導(dǎo)致version+1。如果版本號(hào)不匹配更新將不成功。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 在Win下mysql備份恢復(fù)命令

    在Win下mysql備份恢復(fù)命令

    假設(shè)mysql安裝在c:盤,mysql數(shù)據(jù)庫的用戶名是root,密碼是123456,數(shù)據(jù)庫名是database_name
    2010-02-02
  • MySQL表中添加時(shí)間戳的幾種方法

    MySQL表中添加時(shí)間戳的幾種方法

    這篇文章主要介紹了MySQL表中添加時(shí)間戳的幾種方法,有張表的數(shù)據(jù)需要用同步工具同步至其他庫,需要 update_time 時(shí)間戳字段 來做增量同步,需要的朋友可以參考下
    2019-06-06
  • mysql過濾復(fù)制思路詳解

    mysql過濾復(fù)制思路詳解

    這篇文章主要介紹了mysql過濾復(fù)制的實(shí)現(xiàn)思路,主要講解了兩種思路,一種是在主庫的binlog上實(shí)現(xiàn)另一種是從庫的sql線程上實(shí)現(xiàn),具體實(shí)現(xiàn)過程跟隨小編一起看看吧
    2021-08-08
  • 解決MySQL5.7安裝后沒有data文件夾無法登錄的問題

    解決MySQL5.7安裝后沒有data文件夾無法登錄的問題

    這篇文章主要介紹了解決MySQL5.7安裝后沒有data文件夾無法登錄的問題,需要的朋友可以參考下
    2016-04-04
  • mysql學(xué)習(xí)筆記之?dāng)?shù)據(jù)引擎

    mysql學(xué)習(xí)筆記之?dāng)?shù)據(jù)引擎

    插件式存儲(chǔ)引擎是MySQL數(shù)據(jù)庫最重要的特征之一,用戶可以根據(jù)應(yīng)用的需要尋找如何存儲(chǔ)和索引數(shù)據(jù)、是否使用事務(wù)等。MySQL默認(rèn)支持多種存儲(chǔ)引擎,以適用于不同領(lǐng)域的數(shù)據(jù)庫應(yīng)用需求,用戶可以通過選擇選擇不同的存儲(chǔ)引擎提供應(yīng)用的效率,提供靈活的存儲(chǔ)
    2017-02-02
  • MySQL中時(shí)間函數(shù)操作大全

    MySQL中時(shí)間函數(shù)操作大全

    在使用SQL語言進(jìn)行數(shù)據(jù)查詢和數(shù)據(jù)分析中,常常需要借助日期時(shí)間函數(shù)來計(jì)算相關(guān)的指標(biāo)或生成日期輔助列,下面這篇文章主要給大家介紹了關(guān)于MySQL中時(shí)間函數(shù)操作的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • 阿里云Centos 7.5安裝Mysql的教程

    阿里云Centos 7.5安裝Mysql的教程

    這篇文章主要介紹了阿里云Centos 7.5安裝Mysql的教程,需要的朋友可以參考下
    2017-07-07
  • MySQL使用聚合函數(shù)進(jìn)行單表查詢

    MySQL使用聚合函數(shù)進(jìn)行單表查詢

    這篇文章主要介紹了MySQL使用聚合函數(shù)進(jìn)行單表查詢,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • MySQL備份與恢復(fù)之真實(shí)環(huán)境使用冷備(2)

    MySQL備份與恢復(fù)之真實(shí)環(huán)境使用冷備(2)

    這篇文章主要介紹了MySQL備份與恢復(fù)之真實(shí)環(huán)境使用冷備,需要的朋友可以參考下
    2015-08-08
  • 使用Shell腳本操作多個(gè)MySQL數(shù)據(jù)庫的步驟詳解

    使用Shell腳本操作多個(gè)MySQL數(shù)據(jù)庫的步驟詳解

    本文介紹如何通過Shell腳本批量操作多個(gè)MySQL數(shù)據(jù)庫,包含創(chuàng)建數(shù)據(jù)庫信息文件、編寫執(zhí)行腳本、準(zhǔn)備SQL文件及設(shè)置權(quán)限等步驟,實(shí)現(xiàn)自動(dòng)遍歷連接各數(shù)據(jù)庫并執(zhí)行指定SQL語句創(chuàng)建表的操作,需要的朋友可以參考下
    2025-08-08

最新評(píng)論

青神县| 乐亭县| 平邑县| 东明县| 关岭| 资源县| 邵阳县| 胶南市| 永嘉县| 凤冈县| 龙口市| 台山市| 康乐县| 包头市| 都昌县| 六枝特区| 高淳县| 阳谷县| 昭觉县| 集贤县| 长泰县| 泰和县| 巴楚县| 西贡区| 丹凤县| 嘉义市| 仁寿县| 红桥区| 若尔盖县| 修武县| 和龙市| 甘南县| 景德镇市| 霍林郭勒市| 临泉县| 房产| 广丰县| 易门县| 肥城市| 慈利县| 习水县|