![864b957ddb0d5cb7b84eb3cb1e730e8a.png](https://i-blog.csdnimg.cn/blog_migrate/6b0b3b94f7ffddb21933915c4d20bbd2.png)
在数据库的操作中,有可能会出现数据不一致的问题,一个常见的例子如下:
- A 给 B 转账 100 元
- A 的账户减少 100 元
- B 的账户增加 100 元
- 完成
若在 2 后的一瞬间进行查看,可以发现 A 的账户减少了 100 元但是 B 的账户余额却没有任何变化(当然,这种情况只发生在对应课本的对应章节里),数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性,例如:
现有两处火车票售票点,同时读取某一趟列车车票数据库中车票余额为 X。两处售票点同时卖出一张车票,同时修改余额为 X-1 写回数据库,这样就造成了实际卖出两张火车票而数据库中的记录却只少了一张。
产生这种情况的原因是因为两个事务读入同一数据并同时修改,其中一个事务提交的结果破坏了另一个事务提交的结果,导致其数据的修改被丢失,破坏了事务的隔离性,其他类似的问题还有:
- 丢失或覆盖更新
- 读脏数据
- 非重复读
并发控制要解决的就是这类问题,在公司的面试中关于数据库的环节往往会有这样的问题:如何解决数据库并发带来的不一致性?锁分为哪几类,分别有什么作用?
![5cfb25f020b8a60b9504b115906e5aaf.png](https://i-blog.csdnimg.cn/blog_migrate/24cdfa840a4254995f3fadd40366032c.png)
什么是锁
![886e10169571577916acb8cecab0d867.png](https://i-blog.csdnimg.cn/blog_migrate/0d477033d4a0563fe5019f9cbe8a11a7.png)
为了面对由于并发引来的一些问题,在数据库中有「锁」的概念,即当并发事务同时访问一个资源时,有可能导致数据不一致,因此需要一种机制来将数据访问顺序化,以保证数据库数据的一致性,为了通俗地理解锁的概念,以写作作为比喻:
在一个博客平台上写作和发布时,对于已经发布的文章可以允许所有人同时阅读,而对于正在修改的文章,我们并不希望读者看到我们修改的过程,同时也不希望其他的编辑对我们正在修改的文章有任何的修改,所以我们将文章暂时地下线进行修改&#