`
xitong
  • 浏览: 6210968 次
文章分类
社区版块
存档分类
最新评论

数据库的并发问题以及数据库的隔离级别

 
阅读更多

什么是数据库的并发问题:
在同一时刻,多个事务进行同一数据记录进行操作,导致的问题。
数据库并发产生的五个问题:

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语句对数据进行了操作而未提交,其它事务均可马上查询到操作后的数据,所以这种隔离级别并不能解决其它四个问题。

分享到:
评论

相关推荐

    数据库事务的四大特征以及隔离级别

    隔离性(Isolation):并发的事务是相互隔离的,即一个事务内部的操作及正在操作的数据必须封锁起来,不能被其他企图修改的事务看到。 隔离性可以通过不一样的配置达到不一样的隔离级别。 持久性(Durability):...

    数据库并发控制.doc

    DM用封锁机制来解决并发问题。它可以保证任何时候都可以有多个正在运行的用户程序 ,但是所有用户程序都在彼此完全隔离的环境中运行。 一、 并发控制的预备知识 (一) 并发控制概述 并发控制是以事务(transaction)...

    论文研究 - 键值NoSQL数据库的冲浪并发事务处理模型

    本文提出了一个包含Redis的键值NoSQL数据库的事务模型,以使用户能够以ACID(原子性,一致性,隔离性和持久性)方式访问数据,该模型被生动地称为冲浪并发事务模型。 详细描述了体系结构,重要功能和实现原理。 还...

    [详细完整版]数据库并发.doc

    数据库并发控制技术 数据库是一个共享资源,可以提供多个用户使用。这些用户程序可以一个一个地串行执 行,每个时刻只有一个用户程序运行,执行对数据库的存取,其他用户程序必须等到这 个用户程序结束以后方能对...

    27道高级开发数据库面试题目以及答案.pdf

    数据库事务设置不同的隔离级别会导致的不同并发问题 当前读和快照读的意义; mvcc:多版本控制: 指的是一种提高并发的技术,其解决问题是什么; MVCC实现过程; mvcc三大组件; RC、RR级别下的InnoDB快照读有什么不同...

    大学 数据库 实验 报告 数据库原理实验

    删除数据库:在“数据库”处单击右键,选中“删除” 新建表:双击数据库,然后双击“表”进入,在单击右键“新建表” 4)在企业管理器下创建一个服务器组group1,在这个组下注册一个服务器。查看有哪些数据库及...

    数据库锁和数据库隔离级别

    近突然发现忘了数据库锁和数据库隔离级别,时常弄混它们之间的关系。为此特此写下此博客,以方便自己复习,同时也可以帮助博友。  数据库锁  数据库锁是事务T在对某个数据对象(例如表、记录等)操作之前,先向...

    常见的数据库事务隔离级别

    数据库隔离级别是为了解决数据库并发访问过程中产生的各种数据安全问题. 事务的基本要素(ACID) 原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错...

    数据库事务及锁机制面试题

    脏读、不可重读度、幻读,其实都是数据库的一致性问题,必须由一定的事务隔离机制来解决。性能高和事务完全隔离性无法同时满足,DB提供了4项事务隔离级别来权衡,需要用户根据自身业务来选择合适的隔离级别。隔离...

    Spring声明式数据库事务的使用-隔离级别

    首先是隔离级别,因为互联网时刻存在着高并发的环境,如商品库存,时刻都是多个线程共享的数据,这样就会在多线程的环境中扣减商品库存。对于数据库而言,时刻都是多个事务同时访问同一记录的情况,这样引起数据出现...

    ORACLE的隔离级别

    隔离级别定义了事务与事务之间的隔离程度。 隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。

    innodb如何巧妙的实现事务隔离级别详解

    前言 ...我们都知道事务的几种性质,数据库中的一致性和隔离性等是实现事务的基本思想,在系统有大量的并发访问的情况下,了解和熟练应用数据库的本身的事务隔离级别,对于写出健壮性,并发处理能力强

    (详细)事务特性和隔离级别

    ** (详细)事务特性和隔离级别 ...隔离性(Isolation):并发的数据库事务操作场景下,各事务间相互隔离,互不影响。 持久性(Durability):事务一旦提交后,事务执行结果永久保留在数据库中。 二.事务隔离级别 2.1 RE

    java-数据库系统原理.docx

    并发访问问题 事务隔离级别 丢失修改 MySQL 所有事务隔离级别在数据库层面上均可避免 脏读 READ-COMMITTED 事务隔离级别以上可避免 不可重复读 REPEATABLE-READ 事务隔离级别以上可避免 幻读 SERIALIZABLE 事务隔离...

    数据库九(并发控制)

    事务并发执行带来的问题 会产生多个事务同时存取同一数据情况 可能会存取和存储不正确的数据,破坏事务一致性和数据库的一致性 一、并发控制概述 并发控制机制的任务: 对并发操作进行正确调度;保证事务的隔离性;...

    ORACLE数据库事务隔离级别介绍

    两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题: 1、幻想读:事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,...

    msyql锁、事务隔离级别各种场景验证测试.rar

    这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题,数据库设计了 事务隔离机制、锁机制、MVCC多版本并发控制隔离机制 ,用一整套机制来 解决多事务并发问题。 事务及其ACID属性 事务是由一组...

    数据库答案5.docx

    一个事务内部的操作及使用的数据对并发的其他事务是隔离的 D.事务必须是使数据库从一个一致性状态变到另一个一致性状态 2 事务的一致性是指 。 A.事务中包括的所有操作要么都做,要么都不做 B.事务一旦提交,对...

Global site tag (gtag.js) - Google Analytics