91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中鎖的概念是什么

發布時間:2021-06-16 16:49:00 來源:億速云 閱讀:155 作者:Leah 欄目:MySQL數據庫

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

樂觀鎖

樂觀鎖大多是基于數據版本記錄機制實現,一般是給數據庫表增加一個"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中鎖的概念是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

舒兰市| 沁阳市| 新蔡县| 两当县| 通渭县| 合肥市| 颍上县| 德阳市| 齐齐哈尔市| 苏尼特左旗| 灵台县| 微山县| 衢州市| 扎赉特旗| 横峰县| 木兰县| 库尔勒市| 北海市| 河曲县| 平顺县| 文成县| 吉隆县| 旅游| 潼南县| 东乡族自治县| 岑溪市| 云阳县| 天峻县| 齐河县| 诸城市| 盐池县| 连山| 铁岭县| 玉山县| 齐齐哈尔市| 富顺县| 德昌县| 桑日县| 三河市| 山阳县| 石首市|