国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL對于各種鎖的概念理解

2024-07-24 12:49:30
字體:
供稿:網(wǎng)友

樂觀鎖

樂觀鎖大多是基于數(shù)據(jù)版本記錄機制實現(xiàn),一般是給數(shù)據(jù)庫表增加一個"version"字段。讀取數(shù)據(jù)時,將此版本號一同讀出,之后更新時,對此版本號加一。此時將提交數(shù)據(jù)的版本數(shù)據(jù)與數(shù)據(jù)庫表對應(yīng)記錄的當(dāng)前版本信息進行比對,如果提交的數(shù)據(jù)版本號大于數(shù)據(jù)庫表當(dāng)前版本號,則予以更新,否則認(rèn)為是過期數(shù)據(jù)。

比如下單操作:

查詢出商品信息。

select (quantity, version)from t_goodswhere id = #{id}

根據(jù)商品信息生成訂單。

將商品數(shù)量減1。

update t_goodsset quantity = quantity - 1where id = #{id} and version = #{version}

悲觀鎖

悲觀鎖依靠數(shù)據(jù)庫提供的鎖機制實現(xiàn)。MySQL中的共享鎖和排它鎖都是悲觀鎖。數(shù)據(jù)庫的增刪改操作默認(rèn)都會加排他鎖,而查詢不會加任何鎖。

共享鎖(讀鎖)

共享鎖指的就是對于多個不同的事務(wù),對于一個資源共享同一個鎖。對某一資源加共享鎖,自身可可讀該資源,其他人也可以讀該資源(也可以再加共享鎖,即共享鎖共享多個內(nèi)存),但無法修改。要想修改就必須等所有共享鎖都釋放完之后。語法:select * from table lock in share mode;

比如:

窗口1,在一個未結(jié)束的事務(wù)中給一條數(shù)據(jù)加上共享鎖。

BEGIN;SELECT * FROM t_red_packet WHERE id = 1 LOCK IN SHARE MODE;

窗口2,給同一條數(shù)據(jù)加上共享鎖,加鎖成功。

SELECT * FROM t_red_packet WHERE id = 1 LOCK IN SHARE MODE;

窗口1和窗口2,更新該行數(shù)據(jù),提示[Err] 1205 - Lock wait timeout exceeded; try restarting transaction。需要等到所有共享鎖釋放,才可以進行update操作。

UPDATE t_red_packetSET user_id = 2

排它鎖(寫鎖)

排它鎖指的就是對于多個不同的事務(wù),對同一個資源只能有一把鎖。對某一資源加排它鎖,自身可以進行增刪改查,其他人無法進行加鎖操作,更無法進行增刪改操作。語法:select * from table for update

窗口1,在一個未結(jié)束的事務(wù)中給一條數(shù)據(jù)加上排它鎖。

BEGIN;SELECT * FROM t_red_packet WHERE id = 1 FOR UPDATE;

窗口1,更新該行數(shù)據(jù),成功。

UPDATE t_red_packetSET user_id = 2

窗口2,查詢該行數(shù)據(jù),可以查詢到。

SELECT * FROM t_red_packet WHERE id = 1

窗口2給該條數(shù)據(jù)加鎖,提示[Err] 1205 - Lock wait timeout exceeded; try restarting transaction

SELECT * FROM t_red_packet WHERE id = 1 FOR UPDATE;

綜上,共享鎖就是大家一起來讀,一起來共享鎖,但誰都不要對鎖著的數(shù)據(jù)進行修改,排它鎖就是我自己就是想來修改,你們可以讀,但你們都不能到鎖,也不能對數(shù)據(jù)進行修改。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 淮阳县| 长兴县| 濮阳市| 岱山县| 友谊县| 拉萨市| 龙游县| 耒阳市| 平利县| 伽师县| 洛南县| 祁门县| 新河县| 安图县| 高清| 龙井市| 河池市| 通榆县| 吉木萨尔县| 锡林郭勒盟| 田阳县| 长沙县| 沐川县| 铁岭县| 宁河县| 宽甸| 横峰县| 交口县| 贵定县| 扶绥县| 专栏| 阿坝县| 远安县| 武威市| 罗源县| 马鞍山市| 奉新县| 莱阳市| 咸丰县| 绥芬河市| 神池县|