mysql隔离级别与锁_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都有验证)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值