事务隔离怎么保证

一、什么是事务

  事务:在数据库操作中事务就是一条或者多条SQL语句组成的一个不可分割的工作单元。

  特点:在事务当中的所有操作都正常完成时,整个事务才被提交到数据库当中,如果有一项操作没有完成,那么整个事务会被回滚。

二、事务的四大特性(ACID)

  A : 原子性:

    同一个事务中可能有多条sql语句,要么全部成功,要么直接回滚

  C : 一致性:

    事务中操作的数据以及状态改变是一致性的,即写入的结果必须完全符合预设的规则,不会出现系统意外等原因导致状态不一致。

  I : 隔离性:

    一个事务所操作的数据在提交之前,对其他的事务的不可见

  D : 持久性:

    事务所做的修改会永久保存,不会因为系统意外导致数据丢失。

三、事务的隔离性

  1、隔离性解决三大问题

    脏读 —— 还未提交的数据被读取出来

    不可重读——前后读取数据库的内容不一致

    幻读——前后读取数据库的总量不一致

  2、隔离级别

    RU——读未提交 : 会出现: 脏读,不可重读,幻读

    RC——读已提交: 防止脏读,会出现 不可重读和幻读

    RR——可重复读: 防止脏读,不可重复读,可能会出幻读 (默认级别)

    SR——串行化: 什么都能防止(多个会话窗口同步,不能并发,性能差)

四、怎么保证隔离性?

  1、多版本并发控制(mvcc)(防止不可重复现象)

    ReadView——ReadView其实就是快照,每个事务在启动后第一次执行查询时会创建一份快照

  2、锁(解决了幻读问题

    Gap Locks(间隙锁)——在索引记录之间加锁,或者在第一个索引记录之前加锁,或者在最后一个索引记录之后加锁

    Next-Key Locks(下一键锁)——在索引记录上加锁,并且在索引记录之前的间隙加锁

原文地址:https://www.cnblogs.com/youhongliang/p/12177805.html

时间: 2024-10-09 14:02:43

事务隔离怎么保证的相关文章

事务隔离 保证一系列操作的完整性

3 事务隔离 保证一系列操作的完整性 在mysql中什么是事务? ????举例说明:转账行为 ????????????你要给朋友转100块钱,而此时你的银行卡只有100块钱. ? 转账过程具体到程序里会有一系列的操作,比如查询余额.做加减法.更新余额等,这些操作必须保证是一体的,不然等程序查完之后,还没做减法之前,你这100块钱,完全可以借着这个时间差再查一次,然后再给另外一个朋友转账,如果银行这么整,不就乱了么?这时就要用到"事务"这个概念了. ? 事务定义: 事务就是要保证一组数据

数据库事务的四大特性和事务隔离级别

Reference: [1] http://www.cnblogs.com/fjdingsd/p/5273008.html [2] http://blog.csdn.net/fg2006/article/details/6937413 数据库事务四大特性 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全

<事务隔离性>

Overview 事务的隔离性是指在并发环境中,并发的事务是隔离的.一个事务的执行不能被其他事务干扰. 也即,不同的事务并发操作相同数据时,每个事务都有各自完整的数据空间. 隔离性 在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同,包括: 未授权读取,也称为读未提交(Read Uncommitted).该级别允许脏读取,其隔离级别最低.[关于脏读,幻读,blabla...请往下拉].如果一个事务正在处理某一数据,并对其进行了更新,但同时尚未完成事务,因此还未进行事务提交

Spring五个事务隔离级别和七个事务传播行为

1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据. 2. 不可重复读 :是指在一个事务内,多次读同一数据.在这个事务还没有结束时,另外一个事务也访问该同一数据.那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的.这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不 可重复读.例如,一个编辑人员两次读取同一文档,但在两次读取之间

Innodb中的事务隔离级别和锁的关系

前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力.所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在.这里通过分析MySQL中InnoDB引擎的加锁机制,来抛砖引玉,让读者更好的理解,在事务处理中数据库到底做了什么. #一次封锁or两段锁? 因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道

数据库的事务隔离机制

事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度. 两个并发事务同时访问数据库表相同的行时,这些问题可以归结为5类: 3类数据读问题(脏读.不可重复读和幻象读) 2类数据更新问题(第一类丢失更新和第二类丢失更新). 1.幻读:事务T1读取一条指定where条件的语句,返回结果集.此时事务T2插入一行新记录,恰好满足T1的where条件.然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想. 2.不可重复读取:事务T1读取一行记录,紧接着事务T2修改了

SQL Server 事务隔离级别详解

原文:SQL Server 事务隔离级别详解 标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设计数据库事务级别 SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一定的影响作用. 步骤 事务隔离级别通过影响读操作来间接地影响写操作:可以在回话级别上设置事务隔离级别也可以在查询(表级别)级别上设置事务隔离级别.事务隔离级别总共有6个隔离级别:READ UNCOMMITTED(未提交读,读脏),相当于(NOLOCK)R

postgre 事务隔离

https://github.com/angelfan/DayDayUp/blob/5aed5c7c43132a5bf2f2f1766dab045544c8f870/note/transaction_isolation.md#%E4%BA%8B%E5%8A%A1%E9%9A%94%E7%A6%BB 事务隔离 MVCC的实现方法有两种: 1.写新数据时,把旧数据移到一个单独的地方,如回滚段中,其他人读数据时,从回滚段中把旧的数据读出来: 2.写数据时,旧数据不删除,而是把新数据插入. Postgr

事务隔离级别小记

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