成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL中select for update是鎖表還是鎖行

數據庫 MySQL
本文我們通過一系列示例進行測試,來看看到底是什么場景下鎖表什么場景下鎖行。

在并發一致性控制場景中,我們常常用for update悲觀鎖來進行一致性的保證,但是如果不了解它的機制,就進行使用,很容易出現事故,比如for update進行了鎖表導致其他請求只能等待,從而拖垮系統,因此了解它的原理是非常必要的,下面我們通過一系列示例進行測試,來看看到底是什么場景下鎖表什么場景下鎖行。

驗證

1.示例說明

創建一個賬戶表,插入基礎數據,以唯一索引、普通索引、主鍵、普通字段4 個維度進行select ... for update查詢,查看是進行鎖表還是鎖行。

2.表創建

創建一個賬戶表,指定account_no為唯一索引、id為主鍵、user_no為普通字段、curreny為普通索引:

CREATE TABLE `account_info` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT 'ID' ,
 `account_no` int NOT NULL COMMENT '賬戶編號',
 `user_no` varchar(32) NOT NULL COMMENT '用戶 Id',
 `currency` varchar(10) NOT NULL COMMENT '幣種',
  `amount` DECIMAL(10,2) NOT NULL COMMENT '金額',
 `freeze_amount` DECIMAL(10,2) NOT NULL COMMENT '凍結金額',
  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '創建時間',
  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '修改時間',
  PRIMARY KEY (`id`) USING BTREE,
 UNIQUE KEY `uni_idx_account_no` (`account_no`) ,
 KEY `idx_currency_` (`currency`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='賬戶信息表';

插入基礎數據:

insert into account_info values (1,1,'ur001','RMB',100,0,now(),now());
insert into account_info values (2,2,'ur002','RMB',1000,0,now(),now());
insert into account_info values (3,3,'ur002','DOLLAR',200,0,now(),now());

3.根據主鍵查詢

在事務 1 中,根據主鍵id=1 進行 for update查詢時,事務2、事務 3 都進行阻塞,而事務 4 由于更新的id=2 所以成功,因此判定,根據主鍵進行 for update 查詢時是行鎖。

4.根據唯一索引查詢

在事務 1 中,根據唯一索引account_no=1 進行 for update查詢時,事務2、事務 3 都進行阻塞,而事務 4 由于更新的account_no=2 所以成功,因此判定,根據唯一索引進行 for update 查詢時是行鎖。

5.根據普通索引查詢

在事務 1 中,根據普通索引currency='RMB' 進行 for update查詢時,事務2、事務 3 都進行阻塞,而事務 4 由于更新的currency='DOLLAR`所以成功,因此判定,根據普通索引進行 for update 查詢時是行鎖。

6.根據普通字段查詢

在事務 1 中,根據普通字段user_no='ur001' 進行 for update查詢時,事務2、事務 3 都進行阻塞,而事務 4查詢的是user_no='ur002'也進行阻塞,因此判定,根據普通字段進行 for update 查詢時是表鎖。

總結

如果查詢條件是索引/主鍵字段,那么select ..... for update會進行行鎖。

如果查詢條件是普通字段(沒有索引/主鍵),那么select ..... for update會進行鎖表,這點一定要注意。

責任編輯:趙寧寧 來源: 架構成長指南
相關推薦

2025-02-10 09:58:48

2024-06-14 09:27:00

2023-11-06 08:35:08

表鎖行鎖間隙鎖

2023-10-25 08:21:15

悲觀鎖MySQL

2023-01-27 20:59:19

行鎖表鎖查詢

2024-11-29 07:38:12

MySQL數據庫

2022-12-18 16:56:07

索引MySQL

2020-10-20 13:50:47

MySQL數據庫

2010-05-24 12:50:59

MySQL表級鎖

2023-01-11 09:56:41

索引SQL

2020-02-06 10:02:45

MySQL數據庫全局鎖

2018-07-31 10:10:06

MySQLInnoDB死鎖

2022-07-20 08:06:57

MySQL表鎖Innodb

2022-10-24 00:33:59

MySQL全局鎖行級鎖

2024-04-10 14:27:03

MySQL數據庫

2025-06-04 02:55:00

MySQL意向鎖記錄鎖

2010-11-22 14:27:05

MySQL鎖表

2024-03-04 07:37:40

MySQL記錄鎖

2010-05-24 12:26:26

MySQL鎖表

2024-05-13 12:44:00

InnodbMySQL行級鎖
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产电影一区二区三区爱妃记 | 亚洲三级av | 一区二区三区四区在线 | 超碰成人免费观看 | 欧美一区二区免费在线 | 亚洲女人天堂网 | 一级做a毛片 | 91av视频在线观看 | 日本精品视频一区二区 | 亚洲 成人 av | 欧美jizzhd精品欧美巨大免费 | 99re国产视频 | 欧美一级二级在线观看 | 免费观看色 | 在线看免费的a | 国产精品美女www爽爽爽 | 91麻豆精品国产91久久久久久 | 国产精品一区二区免费 | 久久精品91久久久久久再现 | 精品亚洲一区二区三区四区五区高 | 国产免费一区二区 | 日韩欧美精品一区 | 亚洲一区二区三区四区五区中文 | 国产91在线视频 | 久久久一区二区三区四区 | 日韩欧美一区二区三区免费观看 | 国产精品资源在线 | 亚洲高清视频一区二区 | 亚洲最大av网站 | 日本高清视频在线播放 | 欧美一区二 | 99精品欧美一区二区三区综合在线 | 成人精品在线观看 | 日韩在线成人 | 另类二区 | 国产在线一区二区三区 | 99国产精品久久久久 | 天天操夜夜操 | 欧美午夜在线 | 天堂成人国产精品一区 | 久久久久中文字幕 |