共享锁和排它锁的理解

基本的封锁类型有两种:

排它锁(X锁)和共享锁(S锁).所谓X锁,是事务T对数据A加上X锁时,只允许事务T读取和修改数据A,...所谓S锁,是事务T对数据A加上S锁时,其他事务只能再对数据A加S锁,而不能加X锁,直到T释放A上的S锁 若事务T对数据对象A加了S锁,则T就可以对A进行读取,但不能进行更新(S锁因此又称为读锁),在T释放A上的S锁以前,其他事务可以再对A加S锁,但不能加X锁,从而可以读取A,但不能更新A. 若事务T1对数据A加了排他锁,但是事务T2只想读数据A而不修改数据A,事务T2是可以读得到数据A的。要是想要修改数据A就必须得等T1结束后释放X锁,事务T2才能对数据A进行修改。

当两个事务同时对同一行数据update/delete时,后一个事务执行update/delete时后不会往下运行,是因为会自动加排它锁的原因,会等上一个事务提 交/回滚后才往下执行,这 是四个级别都会出现的问 题,因为当一个事务修改 了,但没有提交,另一个 事务接着对这行数据修改 ,万一上个事务没有提交 而是回退就影响了事务的 一致性这种update的影响不属于幻读不可重复读和脏读(出现这样的情况是因为行排它锁,当一个事务对一行数据增删改后会自动为该行数据加排他锁,那么其它事只可以读该条数据,不能删和改)

update,delete,insert都会自动给涉及到的数据加上排他锁,select语句默认不会加任何锁类型,如果加排他锁可以使用select ...for update语句,加共享锁可以使用select ... lock in share mode语句。所以加过排他锁的数据行在其他事务种是不能修改数据的,也不能通过for update和lock in share mode锁的方式查询数据,但可以直接通过select ...from...查询数据,因为普通查询没有任何锁机制。

补充:

mysql共享锁与排他锁 - java攻城狮 - 博客园mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流。 共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能https://www.cnblogs.com/boblogsbo/p/5602122.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值