码迷,mamicode.com
首页 > 数据库 > 详细

mysql 隔离级别和锁相关

时间:2016-12-06 00:04:44      阅读:311      评论:0      收藏:0      [点我收藏+]

标签:mysql      隔离级别   


mysql数据库中存在三种锁,间隙锁(gap-lock) , 行锁(record-lock),gap-record-lock

gap-record-lock 是间隙锁和行锁的组合,


间隙锁(gap lock) 

行锁(record lock)

record-lock:



测试表:

CREATE TABLE `tt` (

  `tid` int(11) NOT NULL DEFAULT ‘0‘,

  `tname` varchar(10) DEFAULT NULL,

  `tage` tinyint(4) DEFAULT NULL,

  `taddr` varchar(100) DEFAULT NULL,

  `tmark` varchar(1000) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8



无论在什么隔离级别下,以下操作都是要获取表的metadata锁的

truncate,DDL(alter,drop,create),添加索引 会对表添加metadata锁,也就是会锁定整张表



在隔离级别是rr的情况下,delete,update,insert的锁的表现形式


delete from tt where tid = 1  

update tt set taddr = "BeiJing" where tid = 1


1.tid为主键 

(1).1存在于表中就对记录添加record-lock

(2).1不存在于表中gap-lock,行记录的间隙锁


2.tid为普通字段(没有索引)就对所有记录添加,record-lock,grap-lock

 

3.tid为非聚集唯一索引

(1).1存在于表中就对记录添加record-lock,会锁定索引值和行数据

(2).1不存在于表中就添加gap-lock,会锁定索引的某一个范围值


4.tid为非聚集非唯一索引

(1).1存在于表中就添加record-lock,gap-lock,会对行记录,索引记录添加record-lock,会锁定索引的某一个范围

(2).1不存在于表中,会锁定索引的某个范围



insert 

添加意向插入锁,检查某个范围是否被锁定

间隙锁只会影响插入,不会影响update和delete


1.只有主键对记录添加X锁

2.有唯一键,会对唯一键值添加S锁

3.有主键和唯一键,对主键值添加x,对唯一键值添加s


insert into test1  select * from test 

在rr情况下test 添加的是s锁,test1 添加的X 



在隔离级别是rc的情况下,delete,update,insert的锁的表现形式


delete from tt where tid = 1  

update tt set taddr = "BeiJing" where tid = 1


1.tid为主键 

(1).1存在于表中就对记录添加record-lock

(2).1不存在于表中,不添加锁


2.tid为普通字段(没有索引)就对所有记录添加锁


3.tid为非聚集唯一索引

(1).1存在于表中就对记录添加record-lock,会锁定索引值和行数据

(2).1不存在于表中不锁定数据


4.tid为非聚集非唯一索引

(1).1存在于表中就添加record-lock,会对行记录,索引记录添加record-lock

(2).1不存在于表中不添加锁



insert

1.只有主键对记录添加X锁

2.有唯一键,会对唯一键值添加S锁

3.有主键和唯一键,对主键值添加x,对唯一键值添加s



insert into test1  select * from test 

在rc情况下test 不添加锁,test1添加x锁



select *  into outfile  from  test   不锁定test表(rr,rc都有验证)



本文出自 “SQLServer MySQL” 博客,请务必保留此出处http://dwchaoyue.blog.51cto.com/2826417/1879590

mysql 隔离级别和锁相关

标签:mysql      隔离级别   

原文地址:http://dwchaoyue.blog.51cto.com/2826417/1879590

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!