SlideShare une entreprise Scribd logo
1  sur  8
[InnoDB 系列] - 实例解析 Innodb 的隔离级别以
及锁模式
作/译者:叶金荣(Email: ),来源:http://imysql.cn,转
载请注明作/译者和出处,并且不能用于商业用途,违者必究。
1、隔离级别为:READ COMMITTED
READ COMMITTED
一个有些象 Oracle 的隔离级别。所有 SELECT ... FOR UPDATE 和 SELECT ...
LOCK IN SHARE
MOD 语句仅锁定索引记录,而不锁定记录前的间隙,因而允许随意紧挨着已锁
定的记录插入新记录。UPDATE 和 DELETE 语句使用一个带唯一搜索条件的 唯
一的索引仅锁定找到的索引记录,而不包括记录前的间隙。在范围类型
UPDATE 和 DELETE 语句,InnoDB 必须对范围覆盖的间隙设置 next- key 锁定
或间隙锁定以及其它用户做的块插入。这是很必要的,因为要让 MySQL 复制和
恢复起作用,“幽灵行”必须被阻止掉。
持续读行为如同在 Oracle 中:即使在同一事务内, 每个持续读设置并读取它
自己的新快照。请参阅 15.2.10.4 节,“持续非锁定读”
show global variables like ‘tx_isolation ';
| tx_isolation | READ-COMMITTED |
看看实测步骤:
session 1 session 2
begin
begin
select * from v where id=1;
| id
| name |
|
1 | name11 |
select * from v where id=1;
| id
| name |
|
1 | name11 |
select * from v where id=1 lock in share
mode;
| id
| name |
|
1 | name11 |
select * from v where id=1 lock in share
mode;
| id
| name |
|
1 | name11 |
session1 和 sesssion2 请求的都是共享锁,不会互斥
无需等待。
select * from v where id=1 for update;
| id
| name |
|
1 | name11 |
这个时候,由于 session2 发起了 lock in share mode,需要
请求一个共享锁,和 for update 所需要的排它锁是互斥的,
因此 session1 需要等待 session2 提交或回滚才能继续。
commit;
select * from v where id=1;
| id
| name |
|
1 | name11 |
select * from v where id =1 for update;
或者
select * from v where id =1 lock in share
mode;
update v set name = 'name 2' where id=1; session1 首先发起了一个 select ..for update 请求,
记录加一个排它锁,因此 session2 的请求会被等待
session1 提交或者回滚。
commit;
| id
| name |
|
1 | name 2 |
select * from v where id =1;
| id
| name |
|
1 | name 2 |
select * from v where id =1;
| id
| name |
|
1 | name11 |
select * from v where id =1 lock in share
mode;
| id
| name |
|
1 | name 2 |
可以看到,如果只是发起最简单的 select 请求,则
结果是 session2 发生时看到的快照;如果发起一个
for update 或 select..lock in share mode,则可以看到
快照。
这是因为 select…for update 或 select…lock share mo
得最新快照,并且请求加一个排它或者共享 next-k
而普通的 select 查询不会请求加任何锁。
update v set name = ‘name 1’ where id =1;
commit;
select * from v where id=1;
| id
| name |
|
1 | name 1 |
可以看到 session2 提交后的最新结果。
select * from v where id=1;
| id
| name |
|
1 | name 1 |
可以看到 session2 提交后的最新结果。
2、隔离级别为:REPEATABLE
READ
REPEATABLE READ
这是 InnoDB 的默认隔离级别。带唯一搜索条件使用唯一索引的 SELECT ...
FOR UPDATE, SELECT ... LOCK IN
SHARE MODE, UPDATE
和 DELETE 语句只锁定找到的索引记录,而不锁定记录前的间隙。用其它搜索
条件,这些操作采用 next-key 锁定,用 next-key 锁定或者间隙锁定锁住搜索的
索引范围,并且阻止其它用户的新插入。
在持续读中,有一个与之前隔离级别重要的差别:在这个级别,在同一事务内
所有持续读读取由第一次读所确定的同一快照。这个惯例意味着如果你在同一事
务内发出数个无格式 SELECT 语句,这些 SELECT 语句对相互之间也是持续的,
请参阅 15.2.10.4 节,“持续非锁定读”。
show global variables like ‘tx_isolation ';
| tx_isolation | REPEATABLE-READ |
看看实测步骤:
session 1 session 2
begin;
begin;
select * from v where id=1 lock in share
mode;
| id
| name |
|
1 | name 1 |
select * from v where id=1 lock in share
mode;
| id
| name |
|
1 | name 1 |
session1 和 sesssion2 请求的都是共享锁,不
会互斥,因此无需等待。
select * from v where id=1 for update;
| id
| name |
|
1 | name 1 |
这个时候,由于 session2 发起了 lock in share
mode,需要请求一个共享锁,和 for update
所需要的排它锁是互斥的,因此 session1 需
要等待 session2 提交或回滚才能继续。
commit;
begin;
select * from v where id=1;
| id
| name |
|
1 | name 1 |
update v set name='name 2' where id=1;
select * from v where id=1 for update;
或
select * from v where id =1 lock in share
mode;
session1 首先发起了一个 select ..for update
请求 ,会 对该 记录 加一 个排 它锁 ,因 此
session2 的请求会被等待,直到 session1 提
交或者回滚。
commit;
| id
| name |
|
1 | name 2 |
select * from v where id=1;
| id
| name |
|
1 | name 2 |
select * from v where id=1 lock in share
mode;
| id
| name |
|
1 | name 2 |
select * from v where id=1;
| id
| name |
|
1 | name 2 |
这个时候,不管是 select…lock in
share mode 还是 select…for update,还是普
通的 select,得到的结果都是 session 1 更新
后提交的数据。
update v set name = 'name 1' where id=1;
select * from v where id=1;
| id
| name |
|
1 | name 2 |
commit;
select * from v where id=1 ;
| id
| name |
|
1 | name 1 |
select * from v where id=1 ;
| id
| name |
|
1 | name 1 |
关于锁,摘取手册中的几条,更具体的请看 mysql 手册,"存储引擎和表类型" =
> "在 InnoDB 中不同 SQL 语句设置的锁定" 这节。
· SELECT ...
FROM 是一个持续读,读取数据库的快照并且设置不锁定,除非事务隔离级别
被设为 SERIALIZABLE。对于
SERIALIZABLE 级别,这个设置对它遇到的索引记录设置共享的 next-key 锁定。
· SELECT ... FROM ... LOCK IN SHARE
MODE 对读遇到的所有索引记录设置共享的 next-key 锁定。
· SELECT ... FROM ... FOR
UPDATE 对读遇到的所有索引记录设置独占的 next-key 锁定。

Contenu connexe

En vedette

Programming Guide
Programming GuideProgramming Guide
Programming Guideguest63e09c
 
20090109 Dsl2cpp Md Workbench
20090109 Dsl2cpp Md Workbench20090109 Dsl2cpp Md Workbench
20090109 Dsl2cpp Md Workbenchazubi
 
Inside Pediatrics Winter 2008
Inside Pediatrics Winter 2008Inside Pediatrics Winter 2008
Inside Pediatrics Winter 2008Early On Michigan
 
ibbackup vs mysqldump对比测试 - 20080718
ibbackup vs mysqldump对比测试 - 20080718ibbackup vs mysqldump对比测试 - 20080718
ibbackup vs mysqldump对比测试 - 20080718Jinrong Ye
 
Simposium Hortikultura & Umbi Umbian Kadin
Simposium Hortikultura & Umbi Umbian  KadinSimposium Hortikultura & Umbi Umbian  Kadin
Simposium Hortikultura & Umbi Umbian KadinBio Perforasi
 
System Update Midland County April 2010
System Update Midland County April 2010System Update Midland County April 2010
System Update Midland County April 2010Early On Michigan
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130Jinrong Ye
 
Ccresa officeof innovativeprojects_2011_final
Ccresa officeof innovativeprojects_2011_finalCcresa officeof innovativeprojects_2011_final
Ccresa officeof innovativeprojects_2011_finalEarly On Michigan
 
SSAE Mentor Program
SSAE Mentor ProgramSSAE Mentor Program
SSAE Mentor ProgramJosh Wentz
 
Region Campaign
Region CampaignRegion Campaign
Region Campaignserhio2009
 
CreditRiskMonitor Brochure
CreditRiskMonitor BrochureCreditRiskMonitor Brochure
CreditRiskMonitor Brochurekmacdonald2
 
Motivational Volunteer For Fresh Start
Motivational   Volunteer For Fresh StartMotivational   Volunteer For Fresh Start
Motivational Volunteer For Fresh StartJosh Wentz
 
At One Credential
At One CredentialAt One Credential
At One Credentialserhio2009
 
2010 Central Directory for Infants and Toddlers and Students with Disabilities
2010 Central Directory for Infants and Toddlers and Students with Disabilities2010 Central Directory for Infants and Toddlers and Students with Disabilities
2010 Central Directory for Infants and Toddlers and Students with DisabilitiesEarly On Michigan
 
Special Education in Michigan
Special Education in MichiganSpecial Education in Michigan
Special Education in MichiganEarly On Michigan
 
Hp dl380 g7测试结果报告 - 20100823
Hp dl380 g7测试结果报告 - 20100823Hp dl380 g7测试结果报告 - 20100823
Hp dl380 g7测试结果报告 - 20100823Jinrong Ye
 

En vedette (20)

Programming Guide
Programming GuideProgramming Guide
Programming Guide
 
20090109 Dsl2cpp Md Workbench
20090109 Dsl2cpp Md Workbench20090109 Dsl2cpp Md Workbench
20090109 Dsl2cpp Md Workbench
 
Inside Pediatrics Winter 2008
Inside Pediatrics Winter 2008Inside Pediatrics Winter 2008
Inside Pediatrics Winter 2008
 
Tanleab 1
Tanleab 1Tanleab 1
Tanleab 1
 
ibbackup vs mysqldump对比测试 - 20080718
ibbackup vs mysqldump对比测试 - 20080718ibbackup vs mysqldump对比测试 - 20080718
ibbackup vs mysqldump对比测试 - 20080718
 
Smoke free movies
Smoke free moviesSmoke free movies
Smoke free movies
 
Simposium Hortikultura & Umbi Umbian Kadin
Simposium Hortikultura & Umbi Umbian  KadinSimposium Hortikultura & Umbi Umbian  Kadin
Simposium Hortikultura & Umbi Umbian Kadin
 
System Update Midland County April 2010
System Update Midland County April 2010System Update Midland County April 2010
System Update Midland County April 2010
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130
 
Ccresa officeof innovativeprojects_2011_final
Ccresa officeof innovativeprojects_2011_finalCcresa officeof innovativeprojects_2011_final
Ccresa officeof innovativeprojects_2011_final
 
SSAE Mentor Program
SSAE Mentor ProgramSSAE Mentor Program
SSAE Mentor Program
 
Region Campaign
Region CampaignRegion Campaign
Region Campaign
 
CreditRiskMonitor Brochure
CreditRiskMonitor BrochureCreditRiskMonitor Brochure
CreditRiskMonitor Brochure
 
Motivational Volunteer For Fresh Start
Motivational   Volunteer For Fresh StartMotivational   Volunteer For Fresh Start
Motivational Volunteer For Fresh Start
 
2009 OSEP Conference
2009 OSEP Conference2009 OSEP Conference
2009 OSEP Conference
 
At One Credential
At One CredentialAt One Credential
At One Credential
 
2010 Central Directory for Infants and Toddlers and Students with Disabilities
2010 Central Directory for Infants and Toddlers and Students with Disabilities2010 Central Directory for Infants and Toddlers and Students with Disabilities
2010 Central Directory for Infants and Toddlers and Students with Disabilities
 
Child Find Webinar Dec 2008
Child Find Webinar Dec 2008Child Find Webinar Dec 2008
Child Find Webinar Dec 2008
 
Special Education in Michigan
Special Education in MichiganSpecial Education in Michigan
Special Education in Michigan
 
Hp dl380 g7测试结果报告 - 20100823
Hp dl380 g7测试结果报告 - 20100823Hp dl380 g7测试结果报告 - 20100823
Hp dl380 g7测试结果报告 - 20100823
 

Plus de Jinrong Ye

为什么学习MySQL-20220530.pdf
为什么学习MySQL-20220530.pdf为什么学习MySQL-20220530.pdf
为什么学习MySQL-20220530.pdfJinrong Ye
 
如何针对业务做DB优化
如何针对业务做DB优化如何针对业务做DB优化
如何针对业务做DB优化Jinrong Ye
 
程序猿都该知道的MySQL秘籍
程序猿都该知道的MySQL秘籍程序猿都该知道的MySQL秘籍
程序猿都该知道的MySQL秘籍Jinrong Ye
 
MySQL运维那些事
MySQL运维那些事MySQL运维那些事
MySQL运维那些事Jinrong Ye
 
高效Linux SA
高效Linux SA高效Linux SA
高效Linux SAJinrong Ye
 
MySQL设计、优化、运维
MySQL设计、优化、运维MySQL设计、优化、运维
MySQL设计、优化、运维Jinrong Ye
 
我们的MySQL
我们的MySQL我们的MySQL
我们的MySQLJinrong Ye
 
MySQL数据库设计、优化
MySQL数据库设计、优化MySQL数据库设计、优化
MySQL数据库设计、优化Jinrong Ye
 
MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化Jinrong Ye
 
MySQL压力测试经验
MySQL压力测试经验MySQL压力测试经验
MySQL压力测试经验Jinrong Ye
 
Cgroup lxc在17173 iaas应用池中应用
Cgroup lxc在17173 iaas应用池中应用Cgroup lxc在17173 iaas应用池中应用
Cgroup lxc在17173 iaas应用池中应用Jinrong Ye
 
Tpcc mysql使用手册 - 20120329
Tpcc mysql使用手册 - 20120329Tpcc mysql使用手册 - 20120329
Tpcc mysql使用手册 - 20120329Jinrong Ye
 
MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220Jinrong Ye
 
InnoDB引擎数据表压缩特性测试 - 20120329
InnoDB引擎数据表压缩特性测试 - 20120329InnoDB引擎数据表压缩特性测试 - 20120329
InnoDB引擎数据表压缩特性测试 - 20120329Jinrong Ye
 
Xtrabackup工具使用简介 - 20110427
Xtrabackup工具使用简介 - 20110427Xtrabackup工具使用简介 - 20110427
Xtrabackup工具使用简介 - 20110427Jinrong Ye
 
Handler socket测试报告 - 20110422
Handler socket测试报告 - 20110422Handler socket测试报告 - 20110422
Handler socket测试报告 - 20110422Jinrong Ye
 
mysql cluster测试记录 - 20120905
mysql cluster测试记录 - 20120905mysql cluster测试记录 - 20120905
mysql cluster测试记录 - 20120905Jinrong Ye
 
dell服务器raid冷迁移方法
dell服务器raid冷迁移方法dell服务器raid冷迁移方法
dell服务器raid冷迁移方法Jinrong Ye
 
PC服务器阵列卡管理简易手册 叶金荣@CYOU-20121223
PC服务器阵列卡管理简易手册 叶金荣@CYOU-20121223PC服务器阵列卡管理简易手册 叶金荣@CYOU-20121223
PC服务器阵列卡管理简易手册 叶金荣@CYOU-20121223Jinrong Ye
 

Plus de Jinrong Ye (19)

为什么学习MySQL-20220530.pdf
为什么学习MySQL-20220530.pdf为什么学习MySQL-20220530.pdf
为什么学习MySQL-20220530.pdf
 
如何针对业务做DB优化
如何针对业务做DB优化如何针对业务做DB优化
如何针对业务做DB优化
 
程序猿都该知道的MySQL秘籍
程序猿都该知道的MySQL秘籍程序猿都该知道的MySQL秘籍
程序猿都该知道的MySQL秘籍
 
MySQL运维那些事
MySQL运维那些事MySQL运维那些事
MySQL运维那些事
 
高效Linux SA
高效Linux SA高效Linux SA
高效Linux SA
 
MySQL设计、优化、运维
MySQL设计、优化、运维MySQL设计、优化、运维
MySQL设计、优化、运维
 
我们的MySQL
我们的MySQL我们的MySQL
我们的MySQL
 
MySQL数据库设计、优化
MySQL数据库设计、优化MySQL数据库设计、优化
MySQL数据库设计、优化
 
MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化
 
MySQL压力测试经验
MySQL压力测试经验MySQL压力测试经验
MySQL压力测试经验
 
Cgroup lxc在17173 iaas应用池中应用
Cgroup lxc在17173 iaas应用池中应用Cgroup lxc在17173 iaas应用池中应用
Cgroup lxc在17173 iaas应用池中应用
 
Tpcc mysql使用手册 - 20120329
Tpcc mysql使用手册 - 20120329Tpcc mysql使用手册 - 20120329
Tpcc mysql使用手册 - 20120329
 
MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220
 
InnoDB引擎数据表压缩特性测试 - 20120329
InnoDB引擎数据表压缩特性测试 - 20120329InnoDB引擎数据表压缩特性测试 - 20120329
InnoDB引擎数据表压缩特性测试 - 20120329
 
Xtrabackup工具使用简介 - 20110427
Xtrabackup工具使用简介 - 20110427Xtrabackup工具使用简介 - 20110427
Xtrabackup工具使用简介 - 20110427
 
Handler socket测试报告 - 20110422
Handler socket测试报告 - 20110422Handler socket测试报告 - 20110422
Handler socket测试报告 - 20110422
 
mysql cluster测试记录 - 20120905
mysql cluster测试记录 - 20120905mysql cluster测试记录 - 20120905
mysql cluster测试记录 - 20120905
 
dell服务器raid冷迁移方法
dell服务器raid冷迁移方法dell服务器raid冷迁移方法
dell服务器raid冷迁移方法
 
PC服务器阵列卡管理简易手册 叶金荣@CYOU-20121223
PC服务器阵列卡管理简易手册 叶金荣@CYOU-20121223PC服务器阵列卡管理简易手册 叶金荣@CYOU-20121223
PC服务器阵列卡管理简易手册 叶金荣@CYOU-20121223
 

innodb隔离级别测试 - 20100710

  • 1. [InnoDB 系列] - 实例解析 Innodb 的隔离级别以 及锁模式 作/译者:叶金荣(Email: ),来源:http://imysql.cn,转 载请注明作/译者和出处,并且不能用于商业用途,违者必究。 1、隔离级别为:READ COMMITTED READ COMMITTED 一个有些象 Oracle 的隔离级别。所有 SELECT ... FOR UPDATE 和 SELECT ... LOCK IN SHARE MOD 语句仅锁定索引记录,而不锁定记录前的间隙,因而允许随意紧挨着已锁 定的记录插入新记录。UPDATE 和 DELETE 语句使用一个带唯一搜索条件的 唯 一的索引仅锁定找到的索引记录,而不包括记录前的间隙。在范围类型 UPDATE 和 DELETE 语句,InnoDB 必须对范围覆盖的间隙设置 next- key 锁定 或间隙锁定以及其它用户做的块插入。这是很必要的,因为要让 MySQL 复制和 恢复起作用,“幽灵行”必须被阻止掉。 持续读行为如同在 Oracle 中:即使在同一事务内, 每个持续读设置并读取它 自己的新快照。请参阅 15.2.10.4 节,“持续非锁定读”
  • 2. show global variables like ‘tx_isolation '; | tx_isolation | READ-COMMITTED | 看看实测步骤: session 1 session 2 begin begin select * from v where id=1; | id | name | | 1 | name11 | select * from v where id=1; | id | name | | 1 | name11 | select * from v where id=1 lock in share mode; | id | name | | 1 | name11 | select * from v where id=1 lock in share mode; | id | name | | 1 | name11 | session1 和 sesssion2 请求的都是共享锁,不会互斥 无需等待。 select * from v where id=1 for update; | id | name |
  • 3. | 1 | name11 | 这个时候,由于 session2 发起了 lock in share mode,需要 请求一个共享锁,和 for update 所需要的排它锁是互斥的, 因此 session1 需要等待 session2 提交或回滚才能继续。 commit; select * from v where id=1; | id | name | | 1 | name11 | select * from v where id =1 for update; 或者 select * from v where id =1 lock in share mode; update v set name = 'name 2' where id=1; session1 首先发起了一个 select ..for update 请求, 记录加一个排它锁,因此 session2 的请求会被等待 session1 提交或者回滚。 commit; | id | name | | 1 | name 2 | select * from v where id =1; | id | name | | 1 | name 2 | select * from v where id =1; | id | name | | 1 | name11 | select * from v where id =1 lock in share mode; | id | name | | 1 | name 2 | 可以看到,如果只是发起最简单的 select 请求,则 结果是 session2 发生时看到的快照;如果发起一个
  • 4. for update 或 select..lock in share mode,则可以看到 快照。 这是因为 select…for update 或 select…lock share mo 得最新快照,并且请求加一个排它或者共享 next-k 而普通的 select 查询不会请求加任何锁。 update v set name = ‘name 1’ where id =1; commit; select * from v where id=1; | id | name | | 1 | name 1 | 可以看到 session2 提交后的最新结果。 select * from v where id=1; | id | name | | 1 | name 1 | 可以看到 session2 提交后的最新结果。 2、隔离级别为:REPEATABLE READ REPEATABLE READ 这是 InnoDB 的默认隔离级别。带唯一搜索条件使用唯一索引的 SELECT ... FOR UPDATE, SELECT ... LOCK IN SHARE MODE, UPDATE 和 DELETE 语句只锁定找到的索引记录,而不锁定记录前的间隙。用其它搜索
  • 5. 条件,这些操作采用 next-key 锁定,用 next-key 锁定或者间隙锁定锁住搜索的 索引范围,并且阻止其它用户的新插入。 在持续读中,有一个与之前隔离级别重要的差别:在这个级别,在同一事务内 所有持续读读取由第一次读所确定的同一快照。这个惯例意味着如果你在同一事 务内发出数个无格式 SELECT 语句,这些 SELECT 语句对相互之间也是持续的, 请参阅 15.2.10.4 节,“持续非锁定读”。 show global variables like ‘tx_isolation '; | tx_isolation | REPEATABLE-READ | 看看实测步骤: session 1 session 2 begin; begin; select * from v where id=1 lock in share mode; | id | name | | 1 | name 1 | select * from v where id=1 lock in share mode; | id | name | | 1 | name 1 | session1 和 sesssion2 请求的都是共享锁,不
  • 6. 会互斥,因此无需等待。 select * from v where id=1 for update; | id | name | | 1 | name 1 | 这个时候,由于 session2 发起了 lock in share mode,需要请求一个共享锁,和 for update 所需要的排它锁是互斥的,因此 session1 需 要等待 session2 提交或回滚才能继续。 commit; begin; select * from v where id=1; | id | name | | 1 | name 1 | update v set name='name 2' where id=1; select * from v where id=1 for update; 或 select * from v where id =1 lock in share mode; session1 首先发起了一个 select ..for update 请求 ,会 对该 记录 加一 个排 它锁 ,因 此 session2 的请求会被等待,直到 session1 提 交或者回滚。 commit; | id | name | | 1 | name 2 | select * from v where id=1; | id | name | | 1 | name 2 | select * from v where id=1 lock in share mode; | id | name | |
  • 7. 1 | name 2 | select * from v where id=1; | id | name | | 1 | name 2 | 这个时候,不管是 select…lock in share mode 还是 select…for update,还是普 通的 select,得到的结果都是 session 1 更新 后提交的数据。 update v set name = 'name 1' where id=1; select * from v where id=1; | id | name | | 1 | name 2 | commit; select * from v where id=1 ; | id | name | | 1 | name 1 | select * from v where id=1 ; | id | name | | 1 | name 1 | 关于锁,摘取手册中的几条,更具体的请看 mysql 手册,"存储引擎和表类型" = > "在 InnoDB 中不同 SQL 语句设置的锁定" 这节。 · SELECT ... FROM 是一个持续读,读取数据库的快照并且设置不锁定,除非事务隔离级别 被设为 SERIALIZABLE。对于
  • 8. SERIALIZABLE 级别,这个设置对它遇到的索引记录设置共享的 next-key 锁定。 · SELECT ... FROM ... LOCK IN SHARE MODE 对读遇到的所有索引记录设置共享的 next-key 锁定。 · SELECT ... FROM ... FOR UPDATE 对读遇到的所有索引记录设置独占的 next-key 锁定。