mysql 表锁定 排它锁_mysql的表锁和行锁,排他锁和共享锁。

1、表锁和行锁

表锁和行锁锁的粒度不一样,表锁锁住的是一整张表,行锁锁住的是表中的一行数据,行锁是开销最大的锁策略,表锁是开销最小的锁策略。

InnoDB使用的是行级锁,MyISAM使用的是表级锁。

注意:在InnoDB中,例如模糊查询select * from tb where name like 'lin%'的时候也会锁住一整张表。

2、共享锁和排他锁

共享锁又称读锁(S锁),一个事务获取了共享锁,其他事务可以获取共享锁,不能获取排他锁,其他事务可以进行读操作,不能进行写操作。

排他锁又称写锁(X锁),如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。

对于insert、update、delete,InnoDB会自动给涉及的数据加排他锁(X);

对于一般的Select语句,InnoDB不会加任何锁,事务可以通过以下语句给显示加共享锁或排他锁。

共享锁:SELECT ... LOCK IN SHARE MODE;

排他锁:SELECT ... FOR UPDATE;

共享锁例子:

事务一:使用lock in share lock获取共享锁,开始事务,不提交也不回滚

d124a261a0289161a6bb5cc94121acaa.png

事务二:对同一条记录进行修改,会产生阻塞,查询不会阻塞

0396be45ecf03f34b355d7b817022e68.png

事务三:对同一记录进行查询(加共享锁),不阻塞,共享锁允许其他事务也获取共享锁

3c69c5fdb81d94bcca9be552290cf311.png

排他锁例子:

事务一:select语句后跟for update获取排他锁,其他事务不能进行查询和修改的操作

308faa59829e7ef474e5d5aecdc44c6a.png

事务二:对同一记录进行加锁查询会被阻塞

ba001857c3a0c8bf483384ed5449d869.png

事务三:对该记录的加锁写操作会阻塞

7fcdc8026df6c0473d1947d4228c6295.png

参考网址:http://www.hollischuang.com/archives/923

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值