数据库事务的隔离级别

隔离级别都与问题相对应,数据库操作常见的问题:

  1 脏读:   一个事务可以读取另一个事务未提交的数据

  2 不可重复读: 一个事务连续两次执行某个读操作,返回的结果不一致,被修改了

  3 虚读 :一个事务连续两次执行某个读操作,返回的结果不一致,返回的纪录数目有改变

  不可重复读 与 虚读 的区别:

  不可重复读,强调的是,第二次返回的结果中,某个条目被修改过,比如某些字段被修改

  虚读,强调的是,第二次返回结果中,属于第一次返回结果的条目没有任何变化,但是返回条目的数目会变化

  数据库事务隔离级别

  1 read uncommitted  脏读的那个级别

  2 read committed  解决脏读问题,提交了才能被其它事务读到  (大多数数据库的默认事务等级)

  3 repeatable read 可重复读,如何实现:规定一个事务不能修改被其它事务读但是未提交的事务

  4 serializable 最高的事务隔离级别  如何实现:所有的事务都串行执行

  repeatable read是如何实现?

  规定一个事务不能修改其它事务读但是未提交的事务

  这样就保证了一个事务中第二次读到的数据都是没有被修改过得

  为什么repeatable read隔离级别,虚读问题没有被解决掉?

  只对修改作了限制,如果两次读之间进行了插入或者删除操作,满足没有修改其它事务读但未提交的事务,结果,两次读的结果还是会不一致,所以虚读问题没有被解决

  虚读问题解决,serializable隔离级别?

  串行化执行,很容易理解,我在一个事务中,执行两次读操作,在此期间,没有其它事务在执行,必须等我执行完以后才会被执行,因为是串行,大家排队,所以结果不可能不一致。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-13 04:12:53

数据库事务的隔离级别的相关文章

数据库事务以及事务的隔离级别

事务:一个逻辑工作单元要成为事务 事务的四个属性:原子性(atomicity).一致性(consistency).隔离性(isolation)和持久性(durability). 1.原子性(Atomic)     最重要的原则,也是最容易理解的原则.被事务管理的所有方法,要么一起被提交,要么一起回滚. 2.一致性(Consistency)     事务在系统完整性中实施一致性,如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于新有效状态.如果在事务中出现错误,那么系统中的所有变化将自动

高性能MySql学习笔记——锁、事务、隔离级别(转)

为什么需要锁? 因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对Table1.rown进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作进行控制,因此就有了锁的概念. 锁的分类 从对数据操作的类型(读\写)分 读锁(共享锁):针对同一块数据,多个读操作可以同时进行而不会互相影响. 写锁(排他锁):当当前写操作没有完成前,它会阻断其他写锁和读锁. 从锁定的数据范围分 表锁 行锁 为了尽可能提高数据库的并发度,每次锁定的数据范围越小越好

spring事务中隔离级别和spring的事务传播机制

Transaction 也就是所谓的事务了,通俗理解就是一件事情.从小,父母就教育我们,做事情要有始有终,不能半途而废. 事务也是这样,不能做一般就不做了,要么做完,要 么就不做.也就是说,事务必须是一个不可分割的整体,就像我们在化学课里学到的原子,原子是构成物质的最小单位.于是,人们就归纳出事务的第一个特性:原子性(Atomicity).我靠,一点都不神秘嘛. 特别是在数据库领域,事务是一个非常重要的概念,除了原子性以外,它还有一个极其重要的特性,那就是:一致性(Consistency).也就

SQL Server-聚焦事务、隔离级别详解(二十九)

前言 事务一直以来是我最薄弱的环节,也是我打算重新学习SQL Server的出发点,关于SQL Server中事务将分为几节来进行阐述,Always to review the basics.  事务简介 事务是一个工作单元,可能包含查询和修改数据以及修改数据定义等多个活动.我们可以显式或隐式的定义事务边界.可以使用BEGIN TRAN或者BEGIN TRANSACTION语句显式的定义事务的开始.如果希望提交事务,可以使用COMMIT TRAN语句显式的定义事务结束.如果不希望提交事务(即要撤

数据库技术_事务(0001)_冲突情况与隔离级别

基础技术: 1.事务冲突情况 丢失更新(Lost update) 第一类丢失更新: A事务撤销时,把已经提交的B事务的更新数据覆盖了.这种错误可能造成很严重的问题: A事务在撤销时,"不小心"将B事务已经转入账户的金额给抹去了. 第二类丢失更新: A事务覆盖B事务已经提交的数据,造成B事务所做操作丢失: 上面的例子里由于转账事务覆盖了取款事务对存款余额所做的更新,导致银行最后损失了100元,相反如果转账事务先提交,那么用户账户将损失100元. 脏读(dirty read) 当一个事务读

深入分析MSSQL数据库中事务隔离级别和锁机制_MsSql

锁机制 NOLOCK和READPAST的区别. 1.       开启一个事务执行插入数据的操作. BEGIN TRAN t INSERT INTO Customer SELECT 'a','a' 2.       执行一条查询语句. SELECT * FROM Customer WITH (NOLOCK) 结果中显示"a"和"a".当1中事务回滚后,那么a将成为脏数据.(注:1中的事务未提交) .NOLOCK表明没有对数据表添加共享锁以阻止其它事务对数据表数据的修

MSSQL与Oracle数据库事务隔离级别与锁机制对比_oracle

一,事务的4个基本特征 Atomic(原子性): 事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要 么全部成功,要么全部失败. Consistency(一致性): 只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初 状态. Isolation(隔离性): 事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正 确性和完整性.同时,并行事务的修改必须与其他并行事务的修改 相互独立. Durability(持久性): 事务结束后,事务处理的结果必须能够得到固化. 以上属于废话

数据库隔离级别(mysql+Spring)与性能分析

数据库隔离级别与Spring配置事务的联系及性能影响,以下是个人理解,如果有瑕疵请及时指正. 这里以mysql为例,先明确以下几个问题: 一.一般项目如果不自己配置事务的话,一般默认的是autocommit,即执行完一个操作后自动commit,提交事务. (注:事务是绑定在数据库操作上的,也就是当程序执行(statement.excute等操作)转而到数据库层面上的时候,事务才开始发生) 当然spring可以将几个数据库操作动作绑在一个事务中,这样就需要介绍下spring事务配置方法,下面介绍的

mysql+Spring数据库隔离级别与性能分析_Mysql

这里以mysql为例,先明确以下几个问题: 一.一般项目如果不自己配置事务的话,一般默认的是autocommit,即执行完一个操作后自动commit,提交事务. (注:事务是绑定在数据库操作上的,也就是当程序执行(statement.excute等操作)转而到数据库层面上的时候,事务才开始发生)当然spring可以将几个数据库操作动作绑在一个事务中,这样就需要介绍下spring事务配置方法,下面介绍的是常用方法,其他方法网上有很多.spring提供了很多事务配置的策略,很方便,简要介绍一下: 复