前言:

  因为没有多少时间和精力,目前无法深入研究数据库中的事务,比如

  但是,对于事务的一些基本知识,还是需要牢牢掌握的,做到了解事务的基本常识,在实际开发中能够理解各个持久层框架对事务的处理

一:是么是事务?

  下面是百度百科的结果

   

    在开发中对于一个业务逻辑需要对数据进行的一系列CRUD操作,这一系列操作,我们可以把它称为一个事务

    这样理解事务就必须了解事务四大特性:原子性 、一致性、隔离性、持久性

二:事务的四大特性--ACID

  2.1:原子性

    在一个事务中对数据的所有操作,属于一个单元,不可分割,只有成功或者失败,不可能某个操作成功某个操作失败

  2.2:一致性

    事务前后,数据的一致性,在既定规则下的事务处理过程中,必须严格按照既定规则操作数据,不可破坏规则

    维护数据的一致性任务应该由程序员来完成

    比如数据修改前为 10.00 修改完后变成了 5.5 满足一致性应该为5.50(这是我自己的理解)

  2.3:隔离性

    体现在并发事务情况下,多个事务互相隔离,互不影响

  2.4:持久性

    在正确提交事务后,对数据的修改将是永久性的

三:事务的隔离级别

  体现在并发事务中的读的操作

  事务有四个隔离级别:READ-UNCOMMITTED 、  READ COMMITTED、 REPEATABLE READ 、 SERIALIZABLE

  MySQL默认使用repeatable read级别--可重复读

  3.1:脏读

    在事务A中读取到事务B修改了但是未提交的数据,一旦其他事务回滚了,那么这样式比较危险的,读取到了错误的数据

  3.2:不可重复读

    事务中读取到其他事务提交后的数据,重复读取相同数据可能发现前后结果矛盾,因此叫 不可重复读

    解决了脏读,但是在事务A中可以读取到事务B提交后的数据(导致在事务A中多次执行相同的读的操作的结果不同)

  3.3:可重复读

    在一个事务中不会读取到其他事务提交后的数据,重复读取数据前后结果一致,因此叫 可重复读

    但是事务B如果在查询数据后对又修改,然后再读取数据,此时结果逻辑上可能不正确,好像前面读取时发生了幻觉!!

图解MySQL默认隔离级别可重复读解决的问题和存在的问题

  3.4:串行化

    可能在分布式事务中会使用

总结:首先我们需要明确一点,所有隔离级别,可能出现的问题或者所解决的问题都有一个前提,那就是在一个事务中

   对于前三个隔离级别都有各自存在的问题,问题严重程度是递减的

     可能出现的问题都发生在select语句中,毕竟 脏读、不可重复读,可重复读,幻读,都有一个读字

   对于递增的隔离级别,试图要解决的问题是

      脏读:读取到的数据可能是错误的(其他事务未正确提交,或者回滚),可能导致我们错误的判断,错误的数据操作,必须解决

    不可重复读:前后读取的数据不一致,某种程度上违背了事务的隔离性原则;但是在一个事务单元中,相同的读取操作却每次的结果都可能不一样,某种程度上也会让我们感到困惑

    可重复读:相同条件下每次读取到的结果都一样,仅仅是在我们读取前后之间对数据操作有可能会导致结果在本事务中逻辑上存在错误,但是数据本身是没有错的

    对于不可重复读和可重复读,虽然都有各自的缺点,但是都不影响我们对数据的修改,持久化数据的操作(update)总会获取当前最新的值。

四:事务的分类

  4.1:扁平事务(FLAT TRANSACTION)

  4.2:带有保存点的扁平事务(FLAT TRANSACTION WITH SAVPOINTS)

  4.3:链式事务(Chained TRANSACTION)

  4.4:嵌套事务(Nested Transaction) InnoDB不支持

  4.5:分布式事务(Distributed Transaction)--ATM机跨行转账案例

五:MYSQL中的事务

  innoDB是MYSQL数据库的默认存储引擎,支持事务操作

  本来想自己亲手测试一下,不同事务隔离级别对数据读取的影响,想想还是算了吧,了解了就可以了

  MYSQL默认事务隔离级别是REPEATABLE READ---可重复读

  

十:MYSQL中的事务的更多相关文章

  1. 【MySQL】漫谈MySQL中的事务及其实现

    最近一直在做订单类的项目,使用了事务.我们的数据库选用的是MySQL,存储引擎选用innoDB,innoDB对事务有着良好的支持.这篇文章我们一起来扒一扒事务相关的知识. 为什么要有事务? 事务广泛的 ...

  2. 漫谈MySql中的事务

    最近一直在做订单类的项目,使用了事务.我们的数据库选用的是MySql,存储引擎选用innoDB,innoDB对事务有着良好的支持.这篇文章我们一起来扒一扒事务相关的知识. 为什么要有事务? 事务广泛的 ...

  3. MySql中的事务嵌套

    1.Mysql中的事务必须是InnoDB.Berkeley DB引擎,myisam不支持. 2.Mysql是不支持嵌套事务的,开启了一个事务的情况下,再开启一个事务,会隐式的提交上一个事务. 3.My ...

  4. MySQL中Procedure事务编写基础笔记

    原文:MySQL中Procedure事务编写基础笔记 目录: 一.PROCEDURE: 二.CREATE PROCEDURE基本语法: 三.PROCEDURE小进阶   3.1.基本的DECLARE语 ...

  5. MySql中的事务、JDBC事务、事务隔离级别

    一.MySql事务 之前在Oracle中已经学习过事务了,这个东西就是这个东西,但是在MySql中用法还是有一点不同,正好再次回顾一下. 先看看MySql中的事务,默认情况下,每执行一条SQL语句,都 ...

  6. (转)漫谈MySql中的事务

    最近一直在做订单类的项目,使用了事务.我们的数据库选用的是MySql,存储引擎选用innoDB,innoDB对事务有着良好的支持.这篇文章我们一起来扒一扒事务相关的知识. 为什么要有事务? 事务广泛的 ...

  7. 举例说明MySQL中的事务

    一.场景导入 现在有一张仓库表,仓库表中记录了每一个物品的数量,还有一张用户表,用户购买产品,仓库表的产品数量减少,而用户拥有产品的数量增加. 但是如果仓库中的产品数量不足时怎么处理? 例子: #仓库 ...

  8. 【转】全面了解Mysql中的事务

    为什么要有事务? 事务广泛的运用于订单系统.银行系统等多种场景.如果有以下一个场景:A用户和B用户是银行的储户.现在A要给B转账500元.那么需要做以下几件事: 1. 检查A的账户余额>500元 ...

  9. 在MySQL中设置事务隔离级别有2种方法:

    在MySQL中设置事务隔离级别有2种方法: 1 在my.cnf中设置,在mysqld选项中如下设置 [mysqld] transaction-isolation = READ-COMMITTED 2 ...

随机推荐

  1. 一个Java语言所写的shop网站框架明细

    核心框架Spring Framework :作为一个优秀的开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用 ...

  2. linux ping

    ping [ -d] [ -D ] [  -n ] [  -q ] [ -r] [ -v] [  -R ] [ -a addr_family ] [  -c Count ] [ -w timeout ...

  3. php7+新特性

    php7已经发布有段时间了,查了下正式版本的发布时间是2015年底,至于具体的新特性,在这里总结一下. 标量类型声明 php7新增了4种类型, 字符串(string), 整数 (int), 浮点数 ( ...

  4. iOS蓝牙开发总结-4

    蓝牙开发总结 只要熟悉蓝牙的流程,和蓝牙中每一个角色的作用,其实蓝牙通讯并没有想象中的难 1.蓝牙中心CBCentralManager:一般指得是iPhone手机 2.设备(外设)CBPeripher ...

  5. Ubuntu-通过v2版本的rancher安装部署k8s

    环境: ubuntu:16.04+(64位) CPU:2C MEM:>4G docker:17.03.2 1.13.1 1.12.6 基础配置:(若是云服务器,下列只需要放行端口) >&g ...

  6. 转 在shell脚本中使用expect实现scp传输问题

    1.安装expect expect用于shell脚本中自动交互,其是基于tcl编程语言的工具.所以安装expect首先安装tcl.本文中使用的是expect5.45和tcl8.6.6. 安装tcl [ ...

  7. Kettle Rest大文件上传(RestUploadFile.ktr) Rest文件下载(FileDownload.ktr)

    1. Rest大文件上传(RestUploadFile.ktr) 需求描述 上传文件大于10M小于500M 上传文件进行分片(5M一片要比1M分片整体时间快) 先使用java类进行功能模拟在迁移Ktr ...

  8. Apache is running a threaded MPM, but your PHP module is not compiled to be threadsafe. you need to recompile php. pre-configuration failed

    手动配置想要组合版本的wamp环境时,在服务器上直接下载的几个安装包怎么都组合安装不成功,纠结很久,终于找到原因.配置apache支持php后apache一直无法成功启动.后来发现php是nts的版本 ...

  9. promise从易到难

    Chapter 1 // 需求:你要封装一个方法,我给你一个要读取文件的路径,你这个方法能帮我读取文件,并把内容返回给我 const fs = require('fs') const path = r ...

  10. babel-loader7和babel8版本的问题

    根据官网https://www.npmjs.com/package/babel-loader要对应版本 一.babel7.X版本 1.要安装的包  第1套包:npm i babel-core babe ...