数据库并发性带来了哪些问题?
2010-03-01 16:22
363 查看
数据库的并发性带来了很多意想不到的问题。可以概括为三种:丢失修改、不可重复读、读“脏”数据。
一、丢失修改:比如有下面一条数据:"K686 株洲 长沙 12 500".,表示株洲-长沙的K686次车,票价12元,现有数量500张。现在有多个售票窗口在出售此火车票。 A窗口读出车票500,然后卖掉一张,火车票应该变成499张。与A同时的还有B、C、D窗口同时读出火车票500张,然后B、C、D都各卖掉一张,因为每个窗口从数据库读出的都是500,所以写回数据库的时候都是499。然后实际的情况是卖掉了四张,实际剩余票数是496。因为并发性导致了数据库中数据发生错误,这种错误就称为丢失修改。
二、不可重复读:不可重复读指的是一个事务在前后两次读取数据是发现不一致。比如,事务T1读取一条数据,事务T2正在修改这条数据,当T1再次读取同一条数据时发现前后读取的不一致。这就称为不可重复读。
三、读“脏”数据:比如,事务T1修改了一条数据,事务T2读取了这条数据,然而T1由于某种原因进行了回滚,此时T2读到的就是一条“脏”数据,又叫做“幻影”数据。
数据库并发操作带来的问题可以概括为以上三类,产生这些问题的主要原因是因为并发操作破坏了事务的隔离性,怎么解决这个问题?使事务执行的时候互不影响、互不干扰?这就是数据库中的封锁技术。请看下篇。
一、丢失修改:比如有下面一条数据:"K686 株洲 长沙 12 500".,表示株洲-长沙的K686次车,票价12元,现有数量500张。现在有多个售票窗口在出售此火车票。 A窗口读出车票500,然后卖掉一张,火车票应该变成499张。与A同时的还有B、C、D窗口同时读出火车票500张,然后B、C、D都各卖掉一张,因为每个窗口从数据库读出的都是500,所以写回数据库的时候都是499。然后实际的情况是卖掉了四张,实际剩余票数是496。因为并发性导致了数据库中数据发生错误,这种错误就称为丢失修改。
二、不可重复读:不可重复读指的是一个事务在前后两次读取数据是发现不一致。比如,事务T1读取一条数据,事务T2正在修改这条数据,当T1再次读取同一条数据时发现前后读取的不一致。这就称为不可重复读。
三、读“脏”数据:比如,事务T1修改了一条数据,事务T2读取了这条数据,然而T1由于某种原因进行了回滚,此时T2读到的就是一条“脏”数据,又叫做“幻影”数据。
数据库并发操作带来的问题可以概括为以上三类,产生这些问题的主要原因是因为并发操作破坏了事务的隔离性,怎么解决这个问题?使事务执行的时候互不影响、互不干扰?这就是数据库中的封锁技术。请看下篇。
相关文章推荐
- 数据库的并发性及带来的问题
- 数据库并发操作会带来哪些问题及原因
- Jeff Dean的Learned Index为数据库索引带来了哪些启发1
- 如果未来真如小扎所说,靠VR社交,那会带来哪些问题?
- 数据库中的并发操作带来的一系列问题及解决方法
- 数据库中的并发操作带来的一系列问题
- Form认证的数据库表移植带来的问题
- 数据库事务并发带来的问题、及并行
- 数据库事务并发带来的问题
- JS哪些操作带来reflow?常见问题优化
- Jeff Dean的Learned Index为数据库索引带来了哪些启发2
- 多重继承会带来哪些问题?
- 接口的多继承会带来哪些问题?
- SQL Server SQL性能优化之--数据库在“简单”参数化模式下,自动参数化SQL带来的问题
- 如果未来真如小扎所说,靠VR社交,那会带来哪些问题?
- 数据库-并发访问带来的问题
- 后语:除了水平切分,数据库架构设计还经常遇到哪些问题
- 缺少索引会带来三个问题,限制并发性、影响性能、还有可能造成死锁
- 数据库并发操作带来的问题以及解决方案
- 数据库应用程序迁移所带来的问题