`
哈达f
  • 浏览: 119636 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

事务隔离级别

 
阅读更多

事务的隔离级别是根据读写来区分的,并且所讨论的所有问题都是在并发的条件和环境下去讨论的!

读写操作,行级锁,都是对实体纯在的行的进行加锁的,这样也锁也就是对insert,delete无效拉。


更新丢失(Lost update)问题

一般来说第一种是完全的并发状态,并发性非常的高,任何的线程进程都能够对该行数据进行读写操作

这样就会出以下的问题:更新丢失(Lost update)的问题,简单来说就是两个事务同时对一行数据进行了更新写操作,第一个事务先写入数据,第二行接着写入,

但是写入的过程中断,这就导致了数据的丢失,那么第一次更新的数据也就丢失了,这也就是完全没有锁的情况下产生的问题。

那我们自然会想怎么样去解决这个问题呢?


1.读未提交(read uncomminted)

加一个"排他写锁",也就是在一个时间内只能有一个事务能够对该行数据进行写操作,那么自然就解决了并发更新丢失的问题了

但是这样就能完全解决问题了吗?我们来看看还有什么问题,我们既然加了一个“排他写锁”,那么也就是说当一个事务在写入操作一行数据的时候,其他事务都

不能对这样进行写入操作,但是能进行读操作,这样问题就来了,比如:A事务正在写数据,B事务这个时候恰好去读取这行数据,但是由于A事务还没提交commit

由于这个时候A事务可以回滚rollback,那么B事务读到的就是A事务回滚前的数据,这样的数据是和数据库中的数据是不一致的,也就是所谓的”脏读“!

以上的事务隔离级别就是 读未提交(read uncomminted)


2.读已提交(read comminted)

为了解决”脏读“那么我们就可以修改事务的隔离级别为 读已提交(read comminted)也就是在事务A操作修改一行数据,但为提交的时候,其他事务是查询不到该行数据的

当事务A提交以后,其他事务才能查询到该行数据。


3.可重复度(Repeatable Read)

我们再来看一下这种情况,事务B第一次读取了数据之后,事务A紧接着修改了该行数据,然后数据B第二继续读取,但是两次读取到的数据却是不一样的,这就产生了 不可重复读

的问题,那如何解决呢?这可以通过“共享读锁”和“排他写锁”实现,读取数据事务将会禁止写事务(但允许读事务)---”共享读锁“,写事务则禁止任何其他事务---“排他写锁”

那么也就是这样,当A事务在读取数据的时候,禁止其他写事务的执行,而通过“共享读锁”允许其他读事务的并发读,当A事务在进行写操作时,将通过排他锁来禁止其他一切事务的执行

这也就是可重复度(Repeatable Read)


4.可串行化(Serializable)

以上的都是依据修改的角度去分析的,当然还有一种情况是根据增删情况去分析,就会出现所谓的“幻读”问题了,例如:事务A读取一个表中的数据

select * from emp;得到所有的数据,但是这个时候事务B对该表进行了插入操作,insert into  一条记录,那么事务A再进行读操作的时候,发现新增了一条数据,这也就是所谓的“幻读”

这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。



安全性由上倒下增加,并发行降低

 

分享到:
评论

相关推荐

    MY SQL 事务隔离 查询:默认事务隔离级别

    查询:默认事务隔离级别 mysql> select @@tx_isolation;当前会话的默认事务隔离级别 mysql> select @@session.tx_isolation;当前会话的默认事务隔离级别 mysql> select @@global.tx_isolation;全局的事务隔离级别

    MySQL事务隔离级别

    MySQL事务隔离级别是数据库管理系统中一个非常重要的概念,它关系到数据的一致性和并发性能。在MySQL中,事务被用于确保数据库操作的原子性、一致性、隔离性和持久性(ACID特性)。事务隔离级别主要涉及四个方面:读...

    MySQL的四种事务隔离级别

    MySQL数据库管理系统提供了四种事务隔离级别来处理事务并发中可能遇到的问题。事务并发问题通常包括脏读、不可重复读和幻读。 一、事务的基本要素(ACID) 事务具有四个基本要素,即原子性(Atomicity)、一致性...

    spring常用数据库事务传播属性和事务隔离级别1

    Spring 框架提供了一套完善的事务管理机制,其中包含了多种事务传播属性和事务隔离级别。这些特性使得在处理数据库操作时,能够更好地控制事务的边界和行为,从而确保数据的一致性和完整性。 首先,我们来看一下...

    SPRING事务传播特性&事务隔离级别

    ### Spring 事务传播特性和事务隔离级别详解 #### 一、Spring 事务传播特性 在进行多层服务架构设计时,事务的管理尤其重要。为了确保数据的一致性,Spring 提供了一种灵活的方式来控制事务的传播行为。下面详细...

    SQLserver锁和事务隔离级别的比较与使用

    SQL Server的锁机制和事务隔离级别是数据库管理系统中确保数据一致性、避免并发问题的重要机制。在SQL Server中,锁主要用于控制多个用户同时访问同一数据时的并发操作,而事务隔离级别则是确定在事务中如何处理这些...

    06-VIP-深入理解Mysql事务隔离级别与锁机制.pdf

    深入理解Mysql事务隔离级别与锁机制 Mysql事务隔离级别与锁机制是数据库系统中非常重要的概念,它们都是为了解决多事务并发问题而设计的。下面我们将深入讲解这些机制,让大家彻底理解数据库内部的执行原理。 事务...

    事务传播特性&事务隔离级别

    事务传播特性&事务隔离级别 事务传播特性是指在 Java 中,事务的传播行为,即在多个事务之间如何交互和传播。Java 中有七种事务传播特性,分别是: 1. PROPAGATION_REQUIRED:如果存在一个事务,则支持当前事务。...

    MySQL数据库:事务隔离级别.pptx

    事务隔离级别 课程目标 了解 —— 事务隔离级别的概念; 理解 —— 事务隔离的四种级别; 掌握 —— 事务隔离级别的设置; 事务隔离级别 事务隔离:每一个事务都有一个所谓的隔离级,它定义了用户彼此之间隔离和交互...

    数据库事务隔离级别

    介绍数据库事务的四种隔离级别,比较不同隔离级别的区别和影响

    SQLSERVER事务隔离级别的实验研究.pdf

    在多用户并发访问数据库系统时,事务隔离级别的设置对于保障数据一致性与系统并发性能之间至关重要。本文档详细探讨了SQL Server中不同事务隔离级别的实验研究,揭示了各隔离级别与锁管理之间的关系,并通过实验验证...

    spring事务的传播特性和事务隔离级别

    ### Spring事务的传播特性和事务隔离级别 #### 一、Spring事务的传播特性(Propagation) 在Spring框架中,事务管理不仅提供了ACID属性的支持,还引入了事务的传播特性,这些特性决定了当一个方法调用另一个方法时,...

    事务隔离级别 .pdf

    **事务隔离级别** 在计算机科学,尤其是数据库管理系统(DBMS)的设计中,事务隔离级别是确保数据一致性、避免并发操作导致的问题的关键概念。事务是一系列数据库操作的逻辑单元,它们要么全部成功,要么全部失败。...

    数据库事务隔离级别.docx

    ### 数据库事务隔离级别详解 #### 一、引言 在多用户共享的数据库系统中,为了保证数据的一致性和准确性,必须对并发事务进行控制。数据库事务隔离级别是用来管理多个事务之间相互影响的程度,主要解决的问题包括脏...

    事务隔离级别 .docx

    【事务隔离级别】 在计算机科学,特别是在数据库管理系统(DBMS)中,事务隔离级别是确保数据库并发操作一致性的重要概念。事务是一系列数据库操作的逻辑单元,必须作为一个整体执行,要么全部成功,要么全部失败。...

    Hibernate 事物隔离级别 深入探究

    Hibernate 事务隔离级别 深入探究 在 Hibernate 中,事务隔离级别是指数据库系统提供的一种机制,以解决并发事务带来的问题。为了确保数据库的可靠性和一致性,Hibernate 提供了四种事务隔离级别,分别是 ...

    怎么理解SQL SERVER中事务隔离级别及相应封锁机制.pdf

    理解SQL Server中事务隔离级别及相应封锁机制 SQL Server中事务隔离级别是数据库管理系统中一个重要的概念,它决定了事务之间的并发执行和数据的一致性。本文将详细介绍SQL Server中事务隔离级别的概念、分类、特点...

    52 MySQL是如何支持4种事务隔离级别的?Spring事务注解是如何设置的?l.pdf

    MySQL 支持四种事务隔离级别:READ UNCOMMITTED(读未提交)、READ COMMITTED(读已提交)、REPEATABLE READ(可重复读)和 SERIALIZABLE(串行化)。每种隔离级别对应不同程度的事务并发问题的防范,其中,MySQL ...

Global site tag (gtag.js) - Google Analytics