数据库事务隔离级别

1、Read Uncommitted(读未提交);

2、Read Committed(读已提交);

3、Repeatable Read(可重复读取);

4、Serializable(可串行化)。

在数据库操作中,一项事务(Transaction)是由一条或多条操作数据库的 SQL 语句组成的一个不可分割的工作单元,这些操作要么都完成,要么都取消。

数据库事务隔离级别

在实际应用中,数据库中的数据是要被多个用户共同访问的,在多个用户同时操作相同的数据时,可能就会出现一些事务的并发问题,具体如下。

1)脏读

指一个事务读取到另一个事务未提交的数据。

2)不可重复读

指一个事务对同一行数据重复读取两次,但得到的结果不同。

3)虚读/幻读

指一个事务执行两次查询,但第二次查询的结果包含了第一次查询中未出现的数据。

4)丢失更新

指两个事务同时更新一行数据,后提交(或撤销)的事务将之前事务提交的数据覆盖了。

丢失更新可分为两类,分别是第一类丢失更新和第二类丢失更新。

  • 第一类丢失更新是指两个事务同时操作同一个数据时,当第一个事务撤销时,把已经提交的第二个事务的更新数据覆盖了,第二个事务就造成了数据丢失。
  • 第二类丢失更新是指当两个事务同时操作同一个数据时,第一个事务将修改结果成功提交后,对第二个事务已经提交的修改结果进行了覆盖,对第二个事务造成了数据丢失。

为了避免上述事务并发问题的出现,在标准的 SQL 规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。这四种事务的隔离级别如下。

1Read Uncommitted(读未提交)

一个事务在执行过程中,既可以访问其他事务未提交的新插入的数据,又可以访问未提交的修改数据。如果一个事务已经开始写数据,则另外一个事务不允许同时进行写操作,但允许其他事务读此行数据。此隔离级别可防止丢失更新。

2Read Committed(读已提交)

一个事务在执行过程中,既可以访问其他事务成功提交的新插入的数据,又可以访问成功修改的数据。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。此隔离级别可有效防止脏读。

3Repeatable Read(可重复读取)

一个事务在执行过程中,可以访问其他事务成功提交的新插入的数据,但不可以访问成功修改的数据。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。此隔离级别可有效防止不可重复读和脏读。

4Serializable(可串行化)

提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。此隔离级别可有效防止脏读、不可重复读和幻读。但这个级别可能导致大量的超时现象和锁竞争,在实际应用中很少使用。

一般来说,事务的隔离级别越高,越能保证数据库的完整性和一致性,但相对来说,隔离级别越高,对并发性能的影响也越大。因此,通常将数据库的隔离级别设置为 Read Committed,即读已提交数据,它既能防止脏读,又能有较好的并发性能。虽然这种隔离级别会导致不可重复读、幻读和第二类丢失更新这些并发问题,但可通过在应用程序中采用悲观锁和乐观锁加以控制。

原文来源:https://m.php.cn/article/476705.html

数据库事务隔离级别有哪些?相关推荐

  1. 数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)

    一.数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四 ...

  2. 数据库事务隔离级别+Spring 声明性事务隔离级别

    数据库事务隔离级别 数据库提供了四种事务隔离级别, 不同的隔离级别采用不同的锁类开来实现. 在四种隔离级别中, Serializable的级别最高, Read Uncommited级别最低. 大多数数 ...

  3. mysql数据库事务隔离级别是_数据库事务隔离级别-MySQL为例 · Sean

    在银行系统的存取款过程中,当遇到对一个账户并发存取的时候,系统该如何处理比较好.可能不少人会想到线程同步,然而在应用层使用同步会导致对象锁定,大大影响并发效率.此时,充分利用数据库的事务隔离机制可以很 ...

  4. 概述MySQL数据库---事务隔离级别

    同一个应用程序中的多个事务或不同应用程序中的多个事务在同一个数据集上并发执行时, 可能会出现许多意外的问题,事务并发处理可能引起的问题可分为如下三种类型: 脏读(Drity Read): 已知有两个事 ...

  5. 数据库事务隔离级别及脏读、不可重复读、幻读的理解

      开篇声明,由于两位大佬排版不够美观,然后又发现一些歧义,因此我集大佬之所长,精心整理并加以完善,可放心阅读. http://blog.csdn.net/yuxin6866/article/deta ...

  6. mysql数据库事务隔离级别演示

    mysql数据库事务隔离级别演示 关键词: 一.基本概念 二.事务的四个特性(ACID) 三.事务的用法 3.1 相关命令 3.2 使用步骤 四.数据库的隔离级别 五.示例演示(每组事务结束手动com ...

  7. PG数据库事务隔离级别

    Postgres数据库事务隔离级别介绍 0. What is Database Transaction? 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列 ...

  8. 数据库事务隔离级别举例详解

    目录 一.前言 1.1.4种事务隔离级别 1.2.3种读现象 二.举例说明 2.1.读未提交 2.2.读已提交 2.3.可重复读 2.4.串行化 一.前言 本文主要对4种事务隔离级别,具体举例说明各自 ...

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

    本文系转载,原文地址:http://singo107.iteye.com/blog/1175084 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committ ...

最新文章

  1. 如何调用系统的包安装自己的apk呢?
  2. c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法
  3. Kafka controller重设计
  4. C语言实现自组织映射kohone/trace算法(附完整源码)
  5. 06.十分钟学会表达式语言EL
  6. Java核心类库篇3——util
  7. 数据结构之线性表:单链表
  8. 浅谈C语言static关键字 静态变量 函数
  9. I have no name !;sudo: unknown uid 1000: who are you?
  10. 【网易云课堂---轻松读书:番茄工作法(最后)】
  11. Backpropogation反向传播公式推导【李宏毅深度学习版】
  12. SSH学习之MVC和三层架构的区别
  13. JSinput上传图片文件转base64
  14. 称重系统,过磅软件,地磅程序,c#源码
  15. c语言 乱码转化为16进制_编码格式介绍及C语言处理汉字编码
  16. iOS 9:四、设置信任
  17. Java web程序设计(笔记无参考价值)
  18. 上网行为管理设备的介绍,部署与使用
  19. SQL Server 2016 附加--修改逻辑文件名
  20. 1.1关于机器学习和深度学习

热门文章

  1. 修改android设备号
  2. (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  3. 连锁超市如何部署远程监控系统
  4. 字节转换工具,在线字节转换工具
  5. 文件上传之图片上传题目
  6. flutterSDK的安装与使用
  7. 手把手教你下载node
  8. 【最新】【亲测有效】sublime 安装 emmet 失败的解决方法
  9. Buildroot系列开发(七)block device
  10. iOS 14大改还有神秘硬件登场,苹果WWDC20今夜线上发布