当前位置:网站首页>Record the range of data that MySQL update will lock
Record the range of data that MySQL update will lock
2022-06-24 15:05:00 【huan1993】
1、 background
In the project , We often use update sentence , that update Statement will lock the records in the table ? Here we use some simple cases to simulate . Here is my own understanding , If that place is misunderstood , Welcome to point out
2、 Pre knowledge
2.1 Isolation level of database
mysql> show variables like 'transaction_isolation';
+-----------------------+-----------------+
| Variable_name | Value |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)
2.2 Database version
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.28 |
+-----------+
1 row in set (0.00 sec)
2.3 Database storage engine
mysql> show variables like '%storage_engine%';
+---------------------------------+-----------+
| Variable_name | Value |
+---------------------------------+-----------+
| default_storage_engine | InnoDB |
| default_tmp_storage_engine | InnoDB |
| disabled_storage_engines | |
| internal_tmp_mem_storage_engine | TempTable |
+---------------------------------+-----------+
4 rows in set (0.01 sec)
2.4 Is the lock on the record or on the index
The lock is added to the index , If there is no index in the table , Is it added to the table ? It's not , It is also added to the index , There will be a default .
Record locks always lock index records, even if a table is defined with no indexes. For such cases, InnoDB creates a hidden clustered index and uses this index for record locking
Reference link : dev.mysql.com/doc/refman/…
2.5 update...where The basic unit of locking is
UPDATE ... WHERE ... sets an exclusive next-key lock on every record the search encounters Here we can understand that the unit of locking is : next-key lock
2.6 Row-level locks
2.6.1 Record Locks
Record locks , That is, only one record will be locked . In fact, it locks the index of this record . A record lock is a lock on an index record. For example, SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE; prevents any other transaction from inserting, updating, or deleting rows where the value of t.c1 is 10.
2.6.2 Gap Locks
Clearance lock , A gap lock is a lock on the gap between index records , That is, lock an interval . Front and back sections , Not including the record itself .
Clearance lock If using Single column unique index value To update , Yes. degeneration become Record Lock.
The purpose of the clearance lock :
- Prevent new data from being inserted into the gap
- Prevent existing data from being updated into the gap .
Gap locking is not needed for statements that lock rows using a unique index to search > for a unique row. (This
does not includethe case that the search condition includes only > some columns of amultiple-column unique index; in that case, gap locking does occur.)
2.6.3 Next-Key Locks
Next-Key Lock yes On the index record Of Record locks and Before indexing records Of Clearance lock on clearance The combination of . It also locks a section , Front open back close interval . Including the record itself .
If the index value includes 1,5,10,30, that next key The lock may cover the following sections
(negative infinity, 1]
(1, 115
(5, 10]
(10, 30]
(30, positive infinity)
negative infinity It means negative infinity .positive infinity It means positive infinity .
2.6.4 Test the table structure of the lock table
create table test_record_lock
(
id int not null comment ' Primary key ',
age int null comment ' Age , General index ',
name varchar(10) null comment ' full name , No index ',
constraint test_record_lock_pk
primary key (id)
)
comment ' Test record lock ';
create index test_record_lock_age_index
on test_record_lock (age);
2.6.5 Test data in table
mysql> select * from test_record_lock;
+----+------+--------+
| id | age | name |
+----+------+--------+
| 1 | 10 | Zhang San |
| 5 | 20 | Li Si |
| 8 | 25 | Wang Wu |
+----+------+--------+
3 rows in set (0.00 sec)
2.7 View the current lock in the database
select * from performance_schema.data_locks;
Field explanation :
| Field | value | explain |
|---|---|---|
lock_type | TABLE | The lock is on the watch |
| RECORD | Lock the record | |
lock_mode | IX | Intention exclusive lock |
| X perhaps S | next-key lock Lock the record itself and the gap before the record | |
| X,REC_NOT_GAP | Record Lock Lock only the record itself | |
| S,REC_NOT_GAP | Record Lock Lock only the record itself | |
| X,GAP | gap lock | |
| X,INSERT_INTENTION | Insert intention lock | |
lock_data | A specific number | Represents the value of the primary key |
| value , value | The first value is : The value of a normal index Second value : Primary key value |
doubt :X,GAP Can it be understood as X The lock degenerated into GAP lock .
3、 Test data is locked
3.1 Unique index test
This applies to the unique index of a single field , Not suitable for a unique index of multiple fields
3.1.1 Equivalent update - Records exist
explain :
- Add next-key lock, Then the locked record range is (1,5].
- Because it's the only index , And the query value exists ,next-key lock Degenerate into record lock, That is to say, in the end, only id=5 This line of data . The rest of the data does not affect .
3.1.2 Equivalent query - Record does not exist -01
explain :
- Add next-key lock, Then the locked record range is (5,8].
- Because it's the only index , And the query value does not exist ,next-key lock Degenerate into gap, That is, the final locked data range is (5,8). The rest of the data does not affect .
3.1.3 Equivalent update - Record does not exist -02
3.1.4 Scope update
1、 Less than or equal to the maximum critical value
At this point, you can find that all the scanned records in the table have been added next key lock( Lock on index )
2、 Greater than or equal to the minimum critical value
mysql> begin;
Query OK, 0 rows affected (0.01 sec)
mysql> update test_record_lock set name = 'aaa' where id >= 1;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> select LOCK_TYPE,INDEX_NAME,LOCK_MODE,LOCK_DATA from performance_schema.data_locks;
+-----------+------------+---------------+------------------------+
| LOCK_TYPE | INDEX_NAME | LOCK_MODE | LOCK_DATA |
+-----------+------------+---------------+------------------------+
| TABLE | NULL | IX | NULL |
| RECORD | PRIMARY | X,REC_NOT_GAP | 1 |
| RECORD | PRIMARY | X | supremum pseudo-record |
| RECORD | PRIMARY | X | 8 |
| RECORD | PRIMARY | X | 5 |
+-----------+------------+---------------+------------------------+
5 rows in set (0.01 sec)
Only records smaller than the minimum threshold can be inserted into the table .
3、 normal range
3.2 General index test
3.2.1 Equivalent update - Records exist
explain :
- First, the general index
ageadd next-key lock, The scope of locking is (10,20] - next-key lock And lock this record , So in id The value of the index is equal to 5 Added Record Lock
- Because it is a normal index and the value still exists , Therefore, a clearance lock will be added to the next section of this record Gap Lock, The locked range is (20,25)
3.2.2 Equivalent update - Record does not exist
explain :
- obtain next-key lock The locked range is (10,20]
- Because the record to be updated does not exist ,next-key lock Degenerate into gap lock, So the locked range is (10,20)
- Because it is a normal index and the record does not exist , So there is no need to find the next interval again .
3.2.3 Scope update
explain :
- Range update of normal index ,next-key-lock It does not degenerate into gap lock.
3.3 No index update
It can be seen from the above figure , Updating data tables without indexes is dangerous , It needs to be handled with care . No index update , Causes a full table scan , This causes all the scanned records to be added with next-key lock.
3、 Reference link
边栏推荐
- 在CVS中恢复到早期版本
- 证券账户理财安全吗??
- Esp32 series -- comparison of esp32 series
- Preliminary study on AQS
- Online text entity extraction capability helps applications analyze massive text data
- 测试 H5 和小程序的区别,你真的知道吗?
- Bitmap of redis data structure
- 兴业证券靠谱吗?开证券账户安全吗?
- [environment setup] zip volume compression
- API data interface for announcement of Hong Kong listed companies
猜你喜欢

Qunhui synchronizes with alicloud OSS
![[bitbear story collection] June MVP hero story | technology practice collision realm thinking](/img/b7/ca2f8cfb124e7c68da0293624911d1.png)
[bitbear story collection] June MVP hero story | technology practice collision realm thinking

Data sharing between laravel lower views

【比特熊故事汇】6月MVP英雄故事|技术实践碰撞境界思维

左手代码,右手开源,开源路上的一份子

作为一名开发者,对你影响最深的书籍是哪一本?

常见的缺陷管理工具——禅道,从安装到使用手把手教会你

A brief introduction to the lexical analysis of PostgreSQL

成功解决:selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This versi

Method after charging the idea plug-in material theme UI
随机推荐
When installing Wireshark, npcap cannot be installed successfully. It is recommended to use WinPcap first
R语言实战应用精讲50篇(二十三)-贝叶斯理论重要概念: 可信度Credibility, 模型Models, 和参数Parameters
update+catroot+c000021a+critical service failed+drivers+intelide+viaide+000000f
六石管理学:垃圾场效应:工作不管理,就会变成垃圾场
【比特熊故事汇】6月MVP英雄故事|技术实践碰撞境界思维
在同花顺开户证券安全吗,需要什么准备
3 ring kill 360 security guard process
A common defect management tool - Zen, which teaches you from installation to using the handle
六月集训(第23天) —— 字典树
[ansible problem processing] remote execution user environment variable loading problem
Bert whitening vector dimension reduction and its application
GO语言-init()函数-包初始化
高薪程序员&面试题精讲系列115之Redis缓存如何实现?怎么发现热key?缓存时可能存在哪些问题?
R语言构建回归模型诊断(正态性无效)、进行变量变换、使用car包中的powerTransform函数对目标变量进行Box-Cox变换(Box–Cox transform to normality)
Linux Installation cenos7 MySQL - 8.0.26
R language plot visualization: use plot to visualize the training set and test set after data division, use different shape label representation, training set, test set, and display training and test
Multimeter resistance measurement diagram and precautions
左手代码,右手开源,开源路上的一份子
Is it safe to open an account for stock speculation in the top ten securities app rankings in China
IList of PostgreSQL