mysql中的锁机制

mysql中的锁机制

1、锁的分类

共享锁 Shared Locks (简称 S 锁,属于行锁)
排他锁 Exclusive Locks(简称 X 锁,属于行锁)
意向共享锁 Intention Shared Locks (简称 IS 锁,属于表锁)
意向排他锁 Intention Exclusive Locks (简称 IX 锁,属于表锁)
自增锁 AUTO-INC Locks

2、共享锁

​ 共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据库,但是只能读不能修改;

事务A:

select * from student where id = 1 lock in share mode;

事务B:

select * from student where id = 1;(读取数据没问题)

事务B:

update student set name=‘hehe’ where id =1;

注意:无法修改会卡死,当事务A提交事务之后,会立刻修改成功

3、排他锁

​ 排它锁不能与其他锁并存,如一个事务获取了一个数据行的排它锁,其他事务就不能再获取改行的锁,只有当前获取了排它锁的事务可以对数据进行读取和修改。

​ delete、update、insert默认是排他锁

事务A:

select * from student where id = 1 for update;

事务B:

select * from student where id = 1 for update;

select * from student where id = 1 lock in share mode;

注意:事务B操作的时候回卡死,提交事务立马成功。

4、意向共享锁和意向排他锁

意向共享锁:表示事务准备给数据行加入共享锁,也就是说一个数据行在加共享锁之前必须先取得该表的IS锁

意向排他锁:表示事务准备给数据行加入排它锁,也就是说一个数据行加排它锁之前必须先取得该表的IX锁。

意向锁是InnoDB数据操作之前自动加的,不需要用户干预

5、自增锁

针对自增列自增长的一个特殊的表级别锁

SHOW VARIABLES LIKE 'innodb_autoinc_lock_mode';
--默认值1 代表连续,事务未提交则id永久丢失
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值