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

事物隔离的3种预防

 
阅读更多

1. ISOLATION_DEFAULT(一般情况下使用这种配置既可)

这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。

2. ISOLATION_READ_UNCOMMITTED

这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。

(大部分数据库缺省的事物隔离级别都不会出现这种状况)

3. ISOLATION_READ_COMMITTED

保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。

什么是脏读?

例如:

张三的工资为5000,事务A中把他的工资改为8000,但事务A尚未提交。

与此同时,

事务B正在读取张三的工资,读取到张三的工资为8000。

随后,

事务A发生异常,而回滚了事务。张三的工资又回滚为5000。

最后,

事务B读取到的张三工资为8000的数据即为脏数据,事务B做了一次脏读。

(大部分数据库缺省的事物隔离级别都不会出现这种状况)

4. ISOLATION_REPEATABLE_READ

这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。

什么是不可重复读?

例如:

在事务A中,读取到张三的工资为5000,操作没有完成,事务还没提交。

与此同时,

事务B把张三的工资改为8000,并提交了事务。

随后,

在事务A中,再次读取张三的工资,此时工资变为8000。在一个事务中前后两次读取的结果并不致,导致了不可重复读。

(大部分数据库缺省的事物隔离级别都不会出现这种状况)

5. ISOLATION_SERIALIZABLE

这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻读。

什么是幻读?

例如:

目前工资为5000的员工有10人,事务A读取所有工资为5000的人数为10人。

此时,

事务B插入一条工资也为5000的记录。

这是,事务A再次读取工资为5000的员工,记录为11人。此时产生了幻读。

(大部分数据库缺省的事物隔离级别都会出现这种状况,此种事物隔离级别将带来表级锁)

分享到:
评论

相关推荐

    mysql数据库事务隔离级别[参照].pdf

    事务隔离级别是数据库系统用来解决并发问题,保证数据正确性的一种策略。MySQL数据库提供了四种不同的事务隔离级别,它们分别是读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable ...

    57 停一停脚步:梳理一下数据库的多事务并发运行的隔离机制l.pdf

    为了解决这些问题,数据库定义了不同的事务隔离级别,包括读未提交(RU),读已提交(RC),可重复读(RR)和串行化(串行)。RU级别允许读取未提交的事务修改的数据,能避免脏写问题;RC级别允许读取已提交事务的...

    事务管理(二)——SQL SERVER的事务管理

    SQL Server提供了四种事务隔离级别:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。不同的隔离级别对应不同的并发控制策略,例如,读未提交...

    EF事务死锁测试.rar

    默认情况下,EF使用数据库提供的事务隔离级别,如读已提交(Read Committed)或可重复读(Repeatable Read),不同的隔离级别对死锁的影响不同。 2. **死锁的条件**:死锁通常需要满足四个条件:互斥、请求与保持、...

    MySQL事务及Spring隔离级别实现原理详解

    在Spring框架中,`@Transactional`注解提供了设置事务隔离级别的能力,可以通过`isolation`参数调整Session级别的隔离。 至于死锁,它是并发控制中常见的问题,发生在两个或更多事务互相等待对方释放资源而陷入僵局...

    数据库系统实验五_事务编程_ssd7exercise9_

    总的来说,"ssd7exercise9"实验旨在帮助你深入理解数据库事务处理的核心机制,包括事务的隔离性、死锁的预防和解决,以及事务回滚的重要性。通过这个实验,你将能更好地应对现实世界中可能出现的复杂数据库问题,...

    一次长事务导致数据库锁等待超时问题跟踪

    5. 事务隔离级别调整:根据业务需求调整事务的隔离级别,如从串行化降低到可重复读,以减少锁竞争。 6. 数据库设计优化:审查数据库设计,考虑是否需要使用更高级的数据库架构,如分区表、读写分离等。 五、预防...

    Hibernate的事务管理.doc

    Spring事务管理器会自动处理事务的开始、提交、回滚,并根据方法的配置自动调整事务隔离级别。 总结,Hibernate的事务管理是保证数据库操作正确性和一致性的关键,理解并熟练运用事务的四大特性及不同隔离级别,能...

    事务性操作

    3. 隔离性(Isolation):并发执行的事务之间相互隔离,不会互相干扰,看到的数据都是各自事务开始时的一致性视图。 4. 持久性(Durability):一旦事务提交,其结果就是永久的,即使系统故障也应能恢复。 二、多...

    数据库事务共14页.pdf.zip

    在数据库事务中,还会讨论几种常见的事务隔离级别,包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。不同的隔离级别提供了不同级别的数据...

    5.深入浅出分布式事务 唐刘.pdf

    解决这些问题通常需要采用特定的事务隔离策略,例如两阶段提交(2PC)、多阶段提交(3PC)或者基于乐观锁和悲观锁的并发控制机制。在实际应用中,还需要考虑到性能、可用性和扩展性等因素,这往往需要权衡和优化。 ...

    mysql中的事务、锁讲解和操作

    锁机制是实现事务隔离级别的基础。MySQL中的锁可以从多个角度进行分类: 1. 从数据操作的类型分类,分为锁定读(共享锁/读锁)和锁定写(排他锁/写锁)。共享锁允许多个事务同时读取同一数据,而排他锁则阻止其他...

    db2数据库事务日志

    通过这种方式,事务日志确保了数据库的数据一致性和事务的ACID属性(原子性、一致性、隔离性、持久性)。 #### 三、事务日志已满的原因分析 当DB2数据库事务日志已满时,通常会遇到SQL0964C错误。导致这一问题的...

    SQL深入 事务与游标编程

    3. 隔离性(Isolation):并发执行的事务不会相互干扰,看起来像是串行执行的。 4. 持久性(Durability):一旦事务提交,其结果就会永久保存,即使系统崩溃也不会丢失。 在SQL中,事务可以通过BEGIN TRANSACTION、...

    Microsoft SQL Server:事务与锁机制详解及优化

    主要内容包括事务的ACID特性(原子性、一致性、隔离性、持久性)、事务的隔离级别(读未提交、读已提交、可重复读、序列化)、事务的开始与结束、锁的类型(共享锁、排他锁、更新锁、意图锁)及其级别(页级锁、行级...

    SQL Server 2000锁定分析及死锁预防策略.pdf

    锁的保持时间取决于保护请求级别上资源所需的时间长度,如共享锁的保持时间会根据事务隔离级别变化。 2. 锁的模式和相容性 锁的模式涉及对不同资源加锁时使用不同程度的加锁方式。SQL Server中定义了多种锁模式,...

    可生存性DBMS中恶意事务修复算法毕业论文

    3. **恶意事务的撤销策略**:介绍不同的撤销策略,如简单的回滚(Rollback)、选择性回滚(Selective Rollback)以及基于时间戳的恢复算法,这些策略旨在最小化恶意事务的影响并恢复数据一致性。 4. **事务的原子性...

    数据库系统原理:BDB7 数据库事务管理.ppt

    3. 隔离性(Isolation):并发执行的事务之间不会相互干扰,每个事务看到的数据要么是其他事务开始前的状态,要么是所有事务完成后的新状态。 4. 持久性(Durability):一旦事务提交,其结果将永久保存,即使系统...

Global site tag (gtag.js) - Google Analytics