数据库的并发问题以及数据库的隔离级别
来源:互联网 发布:阿里云账号注册 编辑:程序博客网 时间:2024/05/19 02:39
什么是数据库的并发问题:
在同一时刻,多个事务进行同一数据记录进行操作,导致的问题。
数据库并发产生的五个问题:
1、脏读:一个事务读到另一事务未提交的更新数据。
在A事务内,由于B事务对A记录进行了修改但未提交,而A事务马上读取了这个提交的值,在这个值的基础上进了一系列的操作,但另一个事务突然出回滚,导致数据值不一致的问题。
2、虚读:一个事务读到另一事务已提交的新插入的数据。
在A事务内,由于B事务对A表的插入操作并提交,导致在A事务中前后查询得到关于整张表相关的值不一致的问题
3、不可重复读:一个事务读到另一事务已提交的更新数据。
在A事务内,由于B事务对A记录的修改并提交,导致在A事务中前后查询得到同一记录的值不一样的问题。
4、第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖。
在A事务内,读取得到某一记录的值,同时在B事务把同一记录的值进行了修改并提交,A事务基于原来读取到的值进行修改后回滚,在数据库中得到丢失了B事务更新的结果。(这种问题在数据库中基本不会出现)。
5、第二类丢失更新:这是不可重复读中的特例,一个事务覆盖另一事务已提交的更新数据。
在A事务内,读取得到某一记录的值,同时在B事务把同一记录的值进行了修改并提交,A事务基于原来读取到的值进行修改后提交,在数据库中得到丢失了B事务更新的结果。
为了解决以上的一些问题,每个数据库都有隔离级别这样一个概念。
什么是隔离级别:
在A事务内,我们可以对数据库进行增/删/改/查操作,在B事务内,我们也可以进行数据库的增/删/改/查操作,在A事务开启时锁定什么,而仅充许B事务有什么样的操作。
有以下五种隔离级别:(在数据库的四种隔离级别中都可以解决的一个问题就是第一类丢失更新)
Serializable:可以解决以上5个问题,使以上五个问题都不会出现。
Repeatable Read(可重复读): 在一个事务内进行多次数据查询时,保证多次查询的结果是一致的.
Read Commited(提交读):在一个事务中,发出的SQL语句对数据进行了操作并提交后,其它事务才可以查询到操作后的数据。
在脏读这个问题中,A事务不可以读取到B事务未提交的更改,所以可以解决脏读的问题。对于虚读/不可重复读/第二类丢失更新的问题,由于B事务的操作已提交,所以A事务依然可以查询到B事务所操作的数据,因此虚读/不可重复读/第二类丢失更新的问题不能解决。
Read Uncommited(未提交读):在一个事务中,只要发出了SQL语句对数据进行了操作而未提交,其它事务均可马上查询到操作后的数据,所以这种隔离级别并不能解决其它四个问题。
- 数据库的并发问题以及数据库的隔离级别
- 数据库的隔离级别与并发问题
- 数据库的事务、事务并发以及隔离级别
- 数据库并发的五个问题以及四级封锁协议与事务隔离的四个级别
- 数据库并发问题、事务隔离级别以及数据库锁
- 数据库的隔离级别问题
- 数据库事务隔离级别与并发产生的问题
- 数据库隔离级别和并发操作可能导致的问题
- 数据库的事务并发、事务隔离级别
- 数据库的并发问题以及数据库的隔离…
- 数据库并发问题以及数据库的隔离机制
- 数据库事务以及隔离级别和可能出现的问题
- 数据库的隔离级别以及锁
- 数据库事务以及事务的隔离级别
- 数据库的特性以及隔离级别
- 数据库的隔离级别
- 数据库的隔离级别
- 数据库的隔离级别
- 今天开始陆续记录学习和工作碰到的问题及解决办法
- ASP.NET发送邮件
- 关于VC link2005 重复定义,定义冲突的错误解决
- JPA中修改连接数据库的东西在哪修改
- 俄语UI资源的VC程序在英文版windows XP/windows 7俄语环境下乱码问题
- 数据库的并发问题以及数据库的隔离级别
- Ehcache 1.5.0 User Guide - preface(序言)
- Javascript的匿名函数
- PHP TimeZone 的问题
- 删除表中含有默认值的列提示出错的一种处理方式
- Custom Control控件的使用
- struts创建步骤
- AjaxToolKit--AlwaysVisibleControl的介绍
- Proteus深入研究(一): 初体验