MySQL学习记录之X锁和S锁

问题一:在MySQL数据行或者数据表中加了X锁,还可以对其进行查询操作嘛?

解答:

       1、在MySQL中,当一个事务获得了X锁(Exclusive Lock),它实际上是对特定的数据行或表进行了排他性的锁定,以防止其他事务修改或删除这些数据。但是,它并不会阻止其他事务对被锁定的数据进行读取操作。

        2、MySQL的锁机制使用了多粒度锁(Multi-Granularity Locking),即锁的粒度可以是整个表、行、页等不同级别。在该机制下,当一个事务获得了X锁时,并不会完全锁定整张表,而只是锁定了特定的行或页。这样可以保证其他事务能够继续读取未被锁定的行或页,从而提高并发性能。

       3、因此,即使某个事务获得了X锁,其他事务仍然可以查询被锁定表中的其他行或页。只有当其他事务也尝试对被锁定的行或页加上相互冲突的锁(如写锁)时,才会出现冲突,导致等待或阻塞。

       4、需要特别注意的是,虽然其他事务可以读取被锁定的行,但它们不能修改或删除这些行,除非它们自己也获取了相应的锁。这样可以确保事务的一致性和隔离性。

问题二、当一个事务获取到了一条数据记录的X锁以后,其他事务还可以继续获取该记录的S锁嘛?

解答:

        1、当一个事务获得了一条记录的X锁(Exclusive Lock,排他锁),其他事务不能获取该记录的S锁(Shared Lock,共享锁)。X锁和S锁是互斥的,即同一条记录不可以同时被多个事务持有X锁和S锁。

       2、在MySQL中,X锁是一种排他性锁,用于保证数据的独占性,防止其他事务对该记录进行修改或删除操作。而S锁是一种共享锁,表示允许多个事务同时读取同一条记录,但不允许有其他事务对该记录进行修改操作。

       3、当一个事务获取到了X锁后,其他事务如果尝试获取该记录的S锁,会被阻塞等待,直到持有X锁的事务释放锁。只有当持有X锁的事务释放锁之后,其他事务才能获取该记录的S锁,并且可能有多个事务同时持有S锁进行读取操作。这种机制确保了在有写操作时,其他事务无法进行并发的读操作,以维护数据的一致性和隔离性。

最后:锁是用来协调多个进程或者线程并发访问某一资源的机制。可以保证被操作的数据资源保持一致性和完整性以及隔离性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值