事务特性(ACID)

  • 原子性:
    所有步骤要么都执行,要么都不执行,一旦在某个步骤出现错误,则需要进行回滚。

  • 一致性:
    保证数据的正确性:例如:A给B转账100,则在转账之后与转账之前数据应该保持正确(A,B总金额前后一致),保证业务数据不能出错。

  • 隔离性:
    当多个用户同时操作同一张数据表时,数据库需要为每个用户开启一个事务,保证多用户之间的操作不能被其他用户干扰,多个事务之间互相隔离。
    例如:在A,B两个并发的事务中,在事务A看来,事务B已经执行结束或者还没有开始执行,在事务B看来,事务A已经执行结束或者还没有开始执行,类似于一种排队执行的思想。

  • 持久性
    一旦事务提交成功,则会将数据保存到数据库中。
    例如:当转账成功,两个账号的金额会发生变化,则会将金额保存到数据库中永久保存。数据备份多个。

我们先看一下数据库的隔离级别:

修改隔离级别的语句:set global transaction isolation level 隔离级别
查看隔离级别:select @@tx_isolation

mysql默认采用repeatable read重复度隔离级别。
oracle默认采用read committed读已提交的隔离级别。

什么是脏读?
如果两个事务并发执行,一个事务读取了另一个事务没有提交的数据。事务B读取事务A执行的表,然后事务A回滚,事务B则读出的数据时脏数据,称为脏读。

什么是不可重复读
事务A多次读取同一个数据,事务B在事务A多次读取数据的时候,对数据进行修改,导致事务A多次读到的数据不一致。

什么是幻读?
事务A与事务B同时操作一张表,事务A对该表的增加或删除操作,事务B是读不到的,类似于事务B在读数据之前对该表增加了一个标记,标记该表只能读取到该标记的位置,后面数据表发生改变则读取不到。导致读取的数据与数据表的数据不一致。

不可重复读侧重对数据库的修改,幻读侧重对数据库的增加,解决不可重复读需要锁满足的条件,幻读我们需要进行锁表。

隔离级别的效率:
读未提交的(read uncommitted)> 读已提交的(read committed)> 不可重复读(repeatable read)> 串行化(serializable)

数据库中如何实现隔离级别

  • 读未提交:性能最高,路子最野,压根没加锁,所以没有任何隔离效果,我们可以认为它什么也没有做。

  • 读已提交:先对读未提交的数据后面加上commit,解决读脏数据的问题。
    两个事务对同一个数据进行修改,数据最终结果与最后一个修改的一致。当事务A对该数据进行修改时,会加锁,这时如果事务B也想对该数据进行修改则阻塞等待,当事务A对该数据修改完后,释放锁资源,事务B得到锁资源对数据进行修改,但是事务B阻塞等待时会有一个默认等待时间,如果超过该等待时间则超时等待,需要重新对该表进行操作。

  • 可重复读:为了实现可重复读,MySQL采用多版本并发控制。

  • 串行化:读的时候加共享锁,表示其他事务只能读,但是不能进行修改,写的时候加排它锁,表示其他事务不能读不能写。

数据库---事务(二)相关推荐

  1. 数据库事务ACID原则学习分享

    本人结合自己对技术的理解,努力以通俗易懂的内容帮助大家了解技术的基本原理,内容仅供参考,不对或不完善的地方请大家指教,感谢关注! 一.事务概念的引入 当今,信息化技术非常发达的时代,我们通过手机上的银 ...

  2. mysql 数据库事务 (二)隔离级别

    属于事务四大特性之一的隔离性(isolation),解决两个并发事务同时访问数据库表相同的行时,可能存在的问题 目录 基础 四大隔离级别 隔离级别与一致性关系 如何设置 作用范围 补充: 额外: 第一 ...

  3. JDBC学习总结(二)JDBC操作Blob类型字段高效的批量插入JDBC处理数据库事务将多个SQL看成一个事务执行数据库连接池C3P0DBCPDruidDBUtils工具类实现CRUD

    JDBC学习总结(二)JDBC操作Blob类型字段/高效的批量插入/JDBC处理数据库事务/将多个SQL看成一个事务执行/数据库连接池C3P0/DBCP/Druid/DBUtils工具类实现CRUD ...

  4. 深入Spring数据库事务管理(二)

    文章目录 五.数据库的相关知识 (一)ACID特性 (二)丢失更新 第一类丢失更新 第二类丢失更新 (三)隔离级别 脏读 读写提交 不可重复读 幻读 六.选择隔离级别和传播行为 (一)选择隔离级别 ( ...

  5. Mysql数据库事务详解

    80年代中国人结婚四大件:手表.自行车.缝纫机.收音机(三转一响).要把事务娶回家需要四大件,所以事务很刻薄(ACID),四大件清单:原子性(Atom).一致性(Consistent).隔离性(Iso ...

  6. mysql隔离级别加锁情况_MySQL数据库事务各隔离级别加锁情况--read committed amp;amp; MVCC...

    上节回顾 上篇记录了我对MySQL 事务 隔离级别read uncommitted的理解. 这篇记录我对 MySQL 事务隔离级别 read committed & MVCC 的理解. 前言 ...

  7. Spring JDBC-Spring事务管理之数据库事务基础知识

    概述 数据库事务的概念 原子性 一致性 隔离性 持久性 数据并发的问题 脏读dirty read 不可重复读unrepeatable read 幻象读 phantom read 幻象读和不可重复度的区 ...

  8. 大数据WEB阶段(十八)数据库事务

    数据库事务 一.概述 事务的概念 事务是指逻辑上的一组操作 , 组成这组操作的各个单元 , 要么全部成功 , 要么全部失败 . 如:银行转账.. 转账核心操作其实就是两条sql ,两条都执行成功才算成 ...

  9. 隔离区别对待?如何捆绑?Java中的jdbc数据库事务及其隔离级别

    文章目录 一.数据库事务简介 二.JDBC事务处理 三.事务的ACID属性 四.数据库的隔离级别 五.设置隔离级别 一.数据库事务简介 事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态. 事务 ...

  10. 并发事务正确性的准则 可串行化_从0到1理解数据库事务(上):并发问题与隔离级别...

    最近准备写一篇关于Spanner事务的分享,所以先分享一些基础知识,涉及ACID.隔离级别.MVCC.锁,由于太长,只好拆分成上下两篇: 上:并发问题与隔离级别 主要讲事务所要解决的问题.思路,先理解 ...

最新文章

  1. ios wkwebview弹框_iOS WKWebView的javascript alert 不弹的解决方案
  2. redhat6.4中手动创建oracle11g数据库
  3. AI公开课:19.05.29 浣军-百度大数据实验室主任《AutoDL 自动化深度学习建模的算法和应用》课堂笔记以及个人感悟
  4. Python 读写操作Excel —— 安装第三方库(xlrd、xlwt、xlutils、openpyxl)
  5. word转换成pdf java代码_java代码实现word转换成pdf
  6. C语言递归算法将十进制转换为二进制(附完整源码)
  7. c语言 判断日期时间_C语言中不得不知的那些“关键字”和“控制语句”
  8. ssl2648-线段树练习5【线段树】
  9. 对视频中的特征颜色物体(青色水杯)进行跟踪
  10. [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化
  11. raiden_graph
  12. 服务网关 - jwt
  13. 世界第一台电脑_研发世界第一台电脑的核心人物,被美国隐瞒35年,只因他是个华人...
  14. 轻松搭建docker应用的mesos集群
  15. SVM之Libsvm工具包的安装教程
  16. 万由nas系统安装MySQL_ESXi安装万由OS(U-NAS 3.0.9)
  17. python ocr文字识别竖排繁体_古籍族谱繁体竖排中文识别图文攻略-千百OCR
  18. 牛客网-C语言编程入门训练
  19. 【2019.05.26】JS逆向——破解 企名片 参数(encrypt_data)爬虫 超级详细
  20. 哪些著名软件是用C、C++编写的?

热门文章

  1. 资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统
  2. 2.2 LayoutInflater 加载布局文件源码
  3. 《ANTLR 4权威指南 》一导读
  4. PostgreSQL初学
  5. win10+ubuntu双系统安装方案
  6. linux监控http连接数,zabbix监控linux tcp连接数
  7. Tomcat9版本不支持jsp处理PUT,DELETE之外的请求的解决方案(405方法不允许)
  8. MySQL01:MySQL概述
  9. python编程技术总结_大数据技术学习之Spark技术总结
  10. java作业——Day007