数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么全部执行,要么全部都不执行。

一个逻辑工作单元要成为事务,必须满足事务的四大特性(ACID)。即原子性(Atomic)、一致性(Consistent)、隔离性(Insulation)和持久性(Duraction)。

原子性(Atomic):事务是一个完整的操作,事务的各个操作步骤是不可分的。即要么都执行,要么都不执行。

一致性(Consistent):事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态

隔离性(Insulation):系统必须保证事务不受其他并发执行事务的影响。对任何一对事务T1和T2,在T1看来,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行。隔离通过并发控制机制实现。

持久性(Duraction):事务一旦提交到数据库,它对数据库的更新不再受后续操作或故障的影响。

如果我们不考虑事务的隔离性,将会造成以下情况发生:

1、脏读

脏读是指一个事务处理过程中读取了另一个未提交事务的数据。

2、不可重复读

不可重复读是指在对数据库中的某个数据,一个事务多次读取却返回不一样的结果。这是由于在查询的时候,被另一个事务修改提交了。

3、幻读

幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中的所有行的某个数据从“Y”修改成“N”,此时事务T2正在向数据库插入一条记录,数值是“Y”。然后操作事务T1的用户再次查看刚刚修改的数据后,会发现还是有一个数值为“Y”的数据记录。其实是事务T2添加的数据,这就产生了幻读。

数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

脏读 不可重复读 幻读
Read uncommitted Y Y Y

Read committed

N Y Y
Repeatable read N N Y
Serializable N N N

Read uncommitted(读未提交)

例如:A向B转账5000元,但是A刚开始转了8000给B账户,但是还没有提交事务。然后现在B去账户里面查多了8000,A后面发现多转了,于是就重新回滚事务转了5000给B账号,等B下次再去查看的时候发现是5000,这就产生了脏读。

Read committed(读提交)

singo拿着工资卡去消费,系统读取到卡里确实有2000元,而此时她的老婆也正好在网上转账,把singo工资卡的2000元转到另一账户,并在singo之前提交了事务,当singo扣款时,系统检查到singo的工资卡已经没有钱,扣款失败,singo十分纳闷,明明卡里有钱,为何......

出现上述情况,即我们所说的不可重复读,两个并发的事务,“事务A:singo消费”、“事务B:singo的老婆网上转账”,事务A事先读取了数据,事务B紧接了更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变。

当隔离级别设置为Read committed时,避免了脏读,但是可能会造成不可重复读。

Repeatable read (重复读)

当隔离级别设置为Repeatable read时,可以避免不可重复读。当singo拿着工资卡去消费时,一旦系统开始读取工资卡信息(即事务开始),singo的老婆就不可能对该记录进行修改,也就是singo的老婆不能在此时转账。

虽然Repeatable read避免了不可重复读,但还有可能出现幻读。

singo的老婆工作在银行部门,她时常通过银行内部系统查看singo的信用卡消费记录。有一天,她正在查询到singo当月信用卡的总消费金额(select sum(amount) from transaction where month = 本月)为80元,而singo此时正好在外面胡吃海塞后在收银台买单,消费1000元,即新增了一条1000元的消费记录(insert transaction ... ),并提交了事务,随后singo的老婆将singo当月信用卡消费的明细打印到A4纸上,却发现消费总额为1080元,singo的老婆很诧异,以为出现了幻觉,幻读就这样产生了。

Serializable (序列化)

Serializable是最高的事务隔离级别,同时代价也花费最高,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻像读。

转载于:https://blog.51cto.com/zhangyh8856643/1837426

数据库事务的四大特性和隔离级别相关推荐

  1. 数据库事务的四大特性以及隔离级别

    本篇文章主要介绍数据库事务的四大特性ACID,以及数据库的隔离级别. 事务 概念 事务指的是满足 ACID 特性的一系列操作.在数据库中,可以通过 Commit提交一个事务,也可以使用 Rollbac ...

  2. mysql 四大基础操作_事务的四大特性和隔离级别

    MySQL是开源免费和功能多面的小型数据库,MySQL也是目前流行通用的关系型数据库,已经被 Oracle 收购了.随着版本更新升级,加入一些高级功能,MySQL6.x 版本也开始收费.不过本教程将使 ...

  3. mysql特性举例_MySQL事务的四大特性和隔离级别

    1.事务的四大特性(ACID) #### 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2 ...

  4. 事务的四大特性和隔离级别

    1.事务的四大特性(ACID):指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durabilit ...

  5. mysql四种隔离级别知乎_详解MySQL事务的四大特性和隔离级别

    1.事务的四大特性(ACID) 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2.一致性( ...

  6. mysql 默认事务隔离级别_详解MySQL事务的四大特性和隔离级别

    1.事务的四大特性(ACID) 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2.一致性( ...

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

    一.数据库事务的四大特性 事物是指作为一个单元的一组有序的数据库操作,单元是不可分割的,如果一组数据的所有操作都执行成功,事物完成,进行事物提交(commit),其修改作用于所有数据库进程.有一个操作 ...

  8. 事务四大特性及隔离级别

    事务四大特性及隔离级别 咱们都知道事务有四大特性ACID,也就原子性(atomicity|ætəˈmɪsəti|). 一致性(consistency).隔离性(isolation|aɪsəˈleɪʃn ...

  9. 数据库事务的四大特性ACID

    本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务 ...

最新文章

  1. 简述configure、pkg-config、pkg_config_path三者的关系
  2. huge page 能给MySQL 带来性能提升吗?
  3. 在路上---一个平凡人的2015年总结及2016年展望
  4. SpringBoot(七)整合themeleaf+bootstrap
  5. 图像坐标球面投影_坐标系统及投影概述
  6. TensorFlow学习笔记(一)安装、配置、基本用法
  7. iOS-MVVM-模式介绍
  8. linuxliveu盘怎么用_linux mint 12 U盘(live usb)安装及体验
  9. JWT(JSON Web Token) 多网站的单点登录,放弃session 转载https://www.cnblogs.com/lexiaofei/p/7409846.html...
  10. 普中V2 7人多数表决器 51单片机 仿真 proteus
  11. 入门单反相机最最基础知识新人详解
  12. html页面最大化最小化设置,网页窗口最大化快捷键 改变窗口大小的快捷键是什么...
  13. MacBook Pro 触摸板手势突然失效的解决方案
  14. mug网络用语_日常聊天常见网络用语(Daily chat common Internet slang).doc
  15. Win10插了耳机电脑还是外放怎么办
  16. 推荐一个GitHub上牛b的Java学习项目已整理成了文档版本
  17. avg制作工具 开源_23种开源视听制作工具
  18. java编译找不到文件_java报错找不到文件解决方法
  19. 用vim和Markdown, 将MySQL导出的备份转换为HTML格式的数据字典
  20. 程序员写博客的意义何在?为什么推荐程序员写个人博客?

热门文章

  1. Spring Boot 实现接口幂等性的 4 种方案!还有谁不会?
  2. 你说,一个Java字符串到底有多少个字符?
  3. 再见,FastJson...
  4. 阿里员工的Java问题排查工具单
  5. 机器学习数学基础:随机事件与随机变量
  6. NLP新秀prompt跨界出圈,清华刘知远最新论文将它应用到VLM图像端
  7. 自己动手实现轻量级神经网络推理框架
  8. 损失函数理解汇总,结合PyTorch1.7和TensorFlow2
  9. PyTorch算法加速指南
  10. 决策树算法之特征工程-特征提取