当前位置:网站首页>Talking about the range of data that MySQL update will lock
Talking about the range of data that MySQL update will lock
2022-06-24 20:53:00 【1024 Q】
1、 background
2、 Pre knowledge
2.1 Isolation level of database
2.2 Database version
2.3 Database storage engine
2.4 Is the lock on the record or on the index
2.5 update...where The basic unit of locking is
2.6 Row-level locks
3、 Test data is locked
3.1 Unique index test
3.2 General index test
3.3 No index update
4、 Reference link
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
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 : https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html
2.5 update...where The basic unit of locking isUPDATE ... 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.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 include the case that the search condition includes only > some columns of a multiple-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 :
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 .
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: 0mysql> 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.1 Equivalent update - Records exist

explain :
First, the general index age add 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.
1、https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html
2、https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html
This is about talking about MySql update This is the end of the article about the range of data that will be locked , More about MySql update Please search the previous articles of the software development network or continue to browse the relevant articles below. I hope you can support the software development network in the future !
边栏推荐
- Why do we always "give up halfway"?
- The four stages of cloud computing development have finally been clarified
- 二叉树的基本性质与遍历
- RF_ DC system clock setting gen1/gen2
- Difference between map and object
- 宅男救不了元宇宙
- CVPR 2022缅怀孙剑!同济、阿里获最佳学生论文奖,何恺明入围
- Internet of things? Come and see Arduino on the cloud
- Memo mode - game archiving
- Bridging mode -- law firm
猜你喜欢

图像PANR

The Google File System (GFS) learning notes

Sequential stack traversal binary tree

Memo mode - game archiving

伯克利、MIT、剑桥、DeepMind等业内大佬线上讲座:迈向安全可靠可控的AI

年轻人捧红的做饭生意经:博主忙卖课带货,机构月入百万

Basic properties and ergodicity of binary tree
![[普通物理] 光栅衍射](/img/f3/965ff7cd3bb76b4f71b69b9d12ece3.png)
[普通物理] 光栅衍射

The JS method parameter passed a number beginning with 0. A magical problem occurred and bothered me for a long time

Responsibility chain mode -- through interview
随机推荐
What does virtualization mean? What technologies are included? What is the difference with private cloud?
Leetcode (146) - LRU cache
科创人·味多美CIO胡博:数字化是不流血的革命,正确答案藏在业务的田间地头
伯克利、MIT、劍橋、DeepMind等業內大佬線上講座:邁向安全可靠可控的AI
Berkeley, MIT, Cambridge, deepmind et d'autres grandes conférences en ligne: vers une IA sûre, fiable et contrôlable
Docker deploy mysql5.7
Grating diffraction
Hongxiang Yunteng is compatible with dragon lizard operating system, and the product runs stably
[performance tuning basics] performance tuning strategy
Vxlan and MPLS: from data center to Metro Ethernet
微信小程序中使用vant组件
Jd.com: how does redis implement inventory deduction? How to prevent oversold?
全上链哈希游戏dapp系统定制(方案设计)
The first public available pytorch version alphafold2 is reproduced, and Columbia University is open source openfold, with more than 1000 stars
Steps of JMeter performance test
建立自己的网站(14)
京东一面:Redis 如何实现库存扣减操作?如何防止商品被超卖?
《梦华录》“超点”,鹅被骂冤吗?
Compressed list of redis data structures
Smooth live broadcast | analysis of key technologies for live broadcast pain points