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

MySQL中鎖的概念是什么

138次閱讀
沒有評論

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

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

今天就跟大家聊聊有關 MySQL 中鎖的概念是什么,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

樂觀鎖

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

比如下單操作:

查詢出商品信息。

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

根據商品信息生成訂單。

將商品數量減 1。

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

悲觀鎖

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

共享鎖(讀鎖)

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

比如:

窗口 1,在一個未結束的事務中給一條數據加上共享鎖。

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

窗口 2,給同一條數據加上共享鎖,加鎖成功。

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

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

UPDATE t_red_packet
SET user_id = 2

排它鎖(寫鎖)

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

窗口 1,在一個未結束的事務中給一條數據加上排它鎖。

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

窗口 1,更新該行數據,成功。

UPDATE t_red_packet
SET user_id = 2

窗口 2,查詢該行數據,可以查詢到。

SELECT * FROM t_red_packet WHERE id = 1

窗口 2 給該條數據加鎖,提示 [Err] 1205 – Lock wait timeout exceeded; try restarting transaction。

SELECT * FROM t_red_packet WHERE id = 1 FOR UPDATE;

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

行鎖

行鎖就是給一行數據進行加鎖。

表鎖

表鎖就是對一張表進行加鎖。

看完上述內容,你們對 MySQL 中鎖的概念是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業資訊頻道,感謝大家的支持。

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計1542字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 廊坊市| 五大连池市| 抚顺县| 建德市| 肃南| 博乐市| 深水埗区| 黄龙县| 阳谷县| 临湘市| 伊金霍洛旗| 郴州市| 葫芦岛市| 英吉沙县| 五莲县| 大名县| 醴陵市| 格尔木市| 衡阳市| 孝义市| 蓬莱市| 道真| 朔州市| 青州市| 新乡市| 龙南县| 乐业县| 亚东县| 精河县| 内江市| 锦屏县| 石棉县| 三穗县| 福建省| 上虞市| 乌苏市| 珠海市| 阿荣旗| 黄骅市| 内乡县| 伊春市|