锁机制及应用

锁分类

1.从操作的颗粒度可分为表级锁,行级锁,页级锁

表级锁: 每次操作锁住整张表,锁定颗粒度打,发生冲突该路最高,并发度最低,应用再myisam,innodb,bdb等存储引擎中。
行级锁: 每次操作锁住一行数据,锁定颗粒度最小,发生冲突概率最低,并发度最高,应用于innodb
页级锁: 每次锁定相邻一组记录,锁定颗粒度介于锁表和锁行之间,开销和加索时间介于表锁和行锁之间,并发度一般,应用bdb引擎中
2.从操作的类型可分为读锁和写锁
读锁(s锁): 共享锁, 针对同一份数据,多个读操作可以同时进行而不相互影响。
写锁(x锁): 排他锁,当前写操作没有完成前,他会阻断其他写锁和读锁。
ls锁,lx锁: 意向读锁,意向写锁,属于表级锁,s和x主要针对行级锁,再对表记录添加s或x锁之前,会先对表添加ls或lx锁;
s锁: 事务a对记录添加s锁,可以记录进行读操作,不能做修改,其他事务可以多该记录追加s锁但不能追加x锁,需要等记录的s锁全部释放。
x锁: 事务a 对记录添加x锁,可以对记录进行读和修改操作,其他是不不能对记录做读写操作
3.从操作的性能可分为乐观锁和悲观锁

乐观锁:

共享锁(行级锁+读锁)
共享锁又称读锁,简称s锁,共享锁就是多个事务对同一数据可以共享一把锁,都能访问到数据,但只能读不能修改,使用共享锁的方法时select…lock in share mode 只是用于查询。
总结:事务” 中使用了共享锁(读锁),只能读取,不能修改,修改操作被堵塞;
排他锁(行级锁+写锁)
排他锁又称写锁,简称x锁,排他锁就是不能和其他锁并存,如一个事务获取一个数据行的排他锁,其他事务不能对该行记录做其他操作,也不能获取该行的锁。
使用排他锁的方法是在sql末尾加上for update, innodb引擎默认会在update,delete语句加上for update,行级锁的实现其实时依赖其对应的索引,所以如果操作没用到索引的查询,那么会锁住全表记录。
总结 事务使用排他锁(写锁),当事务可以读取和修改,其他事务不能修改,也不能获取记录锁(select … for update),如果查询没有使用索引,将会锁住整个表记录。
乐观锁
新增version字段控制更新 version=1
更新操作a:update employee set ename = ‘校长’ version = version+1 where eid =1 and version = 1;
b更新将找不到version字段就知道已经更新过啦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a帅航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值