自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL悲觀鎖是什么?底層實(shí)現(xiàn)原理?

數(shù)據(jù)庫(kù) MySQL
在 MySQL 中悲觀鎖(Pessimistic Lock),是一種并發(fā)控制機(jī)制,用于防止多個(gè)事務(wù)同時(shí)修改同一條數(shù)據(jù),從而確保數(shù)據(jù)一致性。基于“悲觀”的假設(shè),認(rèn)為在多用戶環(huán)境下,數(shù)據(jù)被多個(gè)事務(wù)同時(shí)訪問(wèn)、或修改的沖突概率較高。

MySQL悲觀鎖經(jīng)常在大廠被問(wèn)到,比如MySQL悲觀鎖是什么?MySQL悲觀鎖有哪些?底層原理...等等,下面我來(lái)詳解MySQL悲觀鎖。

MySQL悲觀鎖

圖片圖片

在 MySQL 中悲觀鎖(Pessimistic Lock),是一種并發(fā)控制機(jī)制,用于防止多個(gè)事務(wù)同時(shí)修改同一條數(shù)據(jù),從而確保數(shù)據(jù)一致性。

基于“悲觀”的假設(shè),認(rèn)為在多用戶環(huán)境下,數(shù)據(jù)被多個(gè)事務(wù)同時(shí)訪問(wèn)、或修改的沖突概率較高。

因此,在操作數(shù)據(jù)之前,先對(duì)數(shù)據(jù)加鎖,確保同一時(shí)刻只有一個(gè)事務(wù)能修改某條數(shù)據(jù),避免臟讀、幻讀、丟失更新...等問(wèn)題。

適用于 庫(kù)存扣減、訂單處理 ...等業(yè)務(wù),防止庫(kù)存超賣、或數(shù)據(jù)篡改。

悲觀鎖的實(shí)現(xiàn)

1.行級(jí)鎖

MySQL悲觀鎖,依賴于數(shù)據(jù)庫(kù)提供的鎖機(jī)制來(lái)實(shí)現(xiàn),比如:MySQL的InnoDB存儲(chǔ)引擎提供了行級(jí)鎖,用于實(shí)現(xiàn)悲觀并發(fā)控制。

常見的行級(jí)鎖包括 :SELECT ... FOR UPDATE,如下所示:

START TRANSACTION; -- 開啟事務(wù)


-- 查詢用戶余額,并加鎖,防止其他事務(wù)修改
SELECT balance FROM accounts WHERE user_id = 1 FOR UPDATE;


-- 更新用戶余額
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;


COMMIT; -- 提交事務(wù),釋放鎖

使用 SELECT ... FOR UPDATE 語(yǔ)句,對(duì)查詢的行,加排他鎖。

首先,事務(wù) A ,先執(zhí)行 SELECT ... FOR UPDATE,獲取寫鎖;

然后,事務(wù) B 試圖執(zhí)行 SELECT ... FOR UPDATE,會(huì)被阻塞,直到 事務(wù) A 提交或回滾。

2.共享鎖

使用 SELECT ... LOCK IN SHARE MODE 語(yǔ)句對(duì)查詢的行加共享鎖,如下所示:

START TRANSACTION;


-- 查詢某個(gè)產(chǎn)品的庫(kù)存,并加共享鎖,防止其他事務(wù)修改
SELECT stock FROM products WHERE product_id = 1 LOCK IN SHARE MODE;


COMMIT;

適用于只讀操作,事務(wù)可以讀取數(shù)據(jù)并加共享鎖,其他事務(wù)仍能讀取數(shù)據(jù),但不能修改,直到共享鎖釋放。

3.表級(jí)鎖

表級(jí)鎖:在事務(wù)操作過(guò)程中,對(duì)整張表進(jìn)行鎖定,以保證在整個(gè)事務(wù)操作期間該表不被其他事務(wù)修改。

LOCK TABLES products READ;  -- 對(duì) products 表加讀鎖


SELECT * FROM products;  -- 允許多個(gè)事務(wù)同時(shí)讀


-- 其他事務(wù)試圖 UPDATE、INSERT、DELETE products 表時(shí),會(huì)被阻塞


UNLOCK TABLES;  -- 釋放鎖

相比于 行級(jí)鎖(Row Lock),表級(jí)鎖的粒度較大,會(huì)鎖住整張表,從而降低了并發(fā)性能,但避免了死鎖問(wèn)題。

在數(shù)據(jù)一致性非常重要的場(chǎng)景中,例如:金融交易、或庫(kù)存管理,悲觀鎖可以確保數(shù)據(jù)的準(zhǔn)確性、和完整性,適合在并發(fā)量不高的環(huán)境。

責(zé)任編輯:武曉燕 來(lái)源: mikechen的互聯(lián)網(wǎng)架構(gòu)
相關(guān)推薦

2025-04-02 01:22:44

MySQL樂觀鎖數(shù)據(jù)

2023-03-17 16:47:23

索引開發(fā)大數(shù)據(jù)

2021-03-30 09:45:11

悲觀鎖樂觀鎖Optimistic

2018-10-15 16:30:14

數(shù)據(jù)庫(kù)索引Mysql

2023-01-04 07:54:03

HashMap底層JDK

2024-05-17 09:33:22

樂觀鎖CASversion

2022-12-19 08:00:00

SpringBootWeb開發(fā)

2024-07-25 09:01:22

2024-09-03 15:14:42

2025-04-23 08:45:00

悲觀鎖樂觀鎖并發(fā)控制機(jī)制

2024-03-07 07:47:04

代碼塊Monitor

2024-01-29 01:08:01

悲觀鎖遞歸鎖讀寫鎖

2022-05-11 08:53:13

MySQL鎖機(jī)制

2024-05-13 12:44:00

InnodbMySQL行級(jí)鎖

2023-02-23 10:32:52

樂觀鎖

2021-01-08 08:34:09

Synchronize線程開發(fā)技術(shù)

2024-01-05 16:43:30

數(shù)據(jù)庫(kù)線程

2023-07-11 08:00:00

2018-07-31 10:10:06

MySQLInnoDB死鎖

2024-08-28 08:00:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)