mysql 关闭锁_Mysql 锁

锁分类

行锁

间隙锁

表锁

行锁(锁原理是基于索引的,如果不命中索引就会升级为表锁,注意Innodb存储引擎)

1、查自动提交是否关闭

命令行打开两个窗口,窗口1关闭自动提交

show variables like 'autocommit';

--关闭自动提交

set autocommit=0;

select * from user;

+----+--------+--------+

| id | xuehao | name |

+----+--------+--------+

| 1 | 110 | stu1 |

| 2 | 111 | stu10 |

| 12 | 112 | stu20 |

+----+--------+--------+

在窗口1中更新一行数据,执行如下语句:

start transaction;

begin;

update user set name='stu2' where id=1;

执行完,打开窗口2,也来更新该记录,发现SQL不能执行

update user set name='stu3' where id=1;

这是时在窗口1手动提交事务,执行commit,在切换回窗口2发现SQL被执行。

2、表锁

思路:xuehao列没有索引,根据学号列更新,测试升级为表锁。

窗口1中,

set autocommit=0;

start transaction;

begin;

update user set name='stu2' where xuehao='110';

窗口2,执行SQL会被卡主

update user set name='stu2' where xuehao='112';

最后,切到窗口1,提交事务commit;窗口2的SQL才会执行。

3、间隙锁

事务隔离级别:可重复读,当保证范围查询,事务内不可变,需要间隙锁。

间隙锁,查询对应的条件列上没有索引或者非唯一索引,间隙锁是左开右闭的。

总结:

注意行锁,在innodb引擎下,命中索引才会有;

生产注意不要行锁变表锁,并发性查;

间隙锁,会产生死锁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值