数据库共享锁(读锁)和排他锁(写锁)

网友投稿 950 2022-12-02

数据库共享锁(读锁)和排他锁(写锁)

数据库共享锁(读锁)和排他锁(写锁)

为了保持数据的一致性,数据库提供了事务。但是,这只能解决单个会话的问题,并不能解决并发操作下数据的一致性。

并发操作下,数据会出现以下问题:

1、修改丢失 事务A与事务B从数据库中读入同一数据并修改,事务B提交的结果破坏了事务A提交的结果,导致事务A的修改被丢失。

2、脏读 事务A修改某一数据,写回磁盘,期间事务B读取同一数据;事务A由于某种原因被撤销,数据回滚,则B读到的数据与库中真实数据不符。(这个与数据库的事务隔离级别有关,可参考拙作:​​​mysql的4种事务隔离级别​​)

3、不可重复读 事务A读取数据d,期间事务B读取数据并修改,提交;则事务A中的数据与库中真实数据不符。

应对之道是引入锁。 常见的锁有排他锁(写锁)和共享锁(读锁)。

1、共享锁 共享锁的意义在于加了共享锁,其他会话就不能加排他锁,除非共享锁移除或释放。读的时候加上共享锁。注意,共享锁的特点是不一定要显式释放,一个会话A加了共享锁,会话B也可以加共享锁,那么共享锁就转移到了会话B,相当于会话A的共享锁已经释放。锁是只有一把的。

2、排他锁 加上排他锁,其他会话不能再加排他锁,除非显式释放。在修改记录的时候使用,所以也叫写锁。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis in查询条件过长的解决方案
下一篇:我的2019
相关文章

 发表评论

暂时没有评论,来抢沙发吧~