您的位置:首页 > 编程语言 > Java开发

数据并发问题-精通spring 企业应用开发实战读书笔记

2018-01-09 22:17 435 查看

数据并发问题

数据的并发问题,是指一个数据库经多个客户端采用并发的方式访问而导致的各种并发问题。这些问题归结为5类,其中包括3类数据读问题;2类数据更新问题。

3类数据读问题:

脏读

A事务读取B事务尚未提交的更改数据,并在这个数据的基础上进行操作。如果恰巧B事务回滚,那么A事务读到的数据根本是不被承认的。

不可重复读

不可重复读指A事务读取B事务已经提交的更改数据。

幻象读

A事务读取了B事务提交的新增数据,这时A事务将出现幻象读的问题。

不可重复读与幻象读的区别主要有两点:

B事务操作是不同。不可重复读,B事务操作是更新;幻象读对应的B事务操作是新增。

解决这两类问题,相应的方法不同。对于不同重复读,只需要解决被更新数据的读取问题。将读取的行数据进锁定—行级锁;对于幻象读,需要解决的是整张数据表的写入问题,数据库使用—表级锁进行解决。

2类数据更新问题

第一类更新丢失

A事务撤销时,把已经提交的B事务的更新数据覆盖了。

第二类更新丢失

A事务覆盖B事务已经提交的数据,造成B事务所作操作丢失。

解决方案–事务隔离级别

为了解决数据并发问题,数据库提供了行级锁与表级锁。但是两种锁使用太复杂。所以数据库系统为用户提供了自动锁机制。只要用户指定会话的事务隔离级别,数据库就会分析事务中的sql语句,然后自动为事务操作的数据资源添加适合的锁。此外数据库还会维护这些锁,当一个资源上的锁数目太多时,自动进行锁升级以提高系统的运行性能,而这一过程对用户来说是完全透明的。那么不同的事务隔离级别能够解决的数据并发能力是不同。解决情况如下表

Y允许,N不允许


隔离级别脏读不可重复读幻象读第一类丢失更新第二类丢失更新
read uncommittedYYYNY
read committedNYYNY
repeatable readNNYNN
serializableNNNNN
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息