Mysql事务

一、事务存在的意义

1、事务定义

  • 事务:事务是一个最小的不可在分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务是一个最小的工作单元)
  • 一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成。
  • 事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同。

2.事务是什么?

多个操作同时进行,那么同时成功,那么同时失败。这就是事务。

事务有四个特性:一致性、持久性、原子性、隔离性

比如有一个订单业务

1.订单表当中添加一条记录 2.商品数量数据更新(减少) 3…

当多个任务同时进行操作的时候,这些任务只能同时成功,或者同时失败。

3.Mybatis关于事务的管理

MyBatis框架中的事务默认是手动提交的,也就是每次编写程序都需要调用commit()方法提交事务

<transactionManager type="JDBC"></transactionManager>  ====》程序员自己控制处理的提交和回滚

二、事务的四大性质

  1. 原子性:事务是一个不可分割的工作单位,要么同时成功,要么同时失败。例:当两个人发起转账业务时,如果A转账发起,而B因为一些原因不能成功接受,事务最终将不会提交,则A和B的请求最终不会成功。

  2. 持久性:一旦事务提交,他对数据库的改变就是永久的。:只要提交了事务,将会对数据库的数据进行永久性刷新。

  3. 隔离性:多个事务之间相互隔离的,互不干扰

  4. 一致性:事务执行接收之后,数据库完整性不被破坏

    注意:只有当前三条性质都满足了,才能保证事务的一致性

刷脏:Mysql为了保证存储效率,于是每次将要读写的文件是先存储在缓存池中,对于数据的操作是在缓存池中,而mysql将会定期的刷新到磁盘中。

1、如何保证原子性:

​ 首先:对于A和B两操作要操作成功就一定需要更改到表的信息,如果如图所示A语句操作成功,而B语句操作时出现断电等其他情况终止了操作,所以此时两个事务没有操作成功,在没有提交事务之前,mysql会先记录跟新前的数据到undo log日志里面,当最终的因为操作不成功而发生事务回滚时,会从undo log日志里面先前存好的数据,重新对数据库的数据进行数据的回退。

undo log日志:(撤销回退的日志)主要存储数据库更新之前的数据,用于作备份

2、如何保证事务的持久性:

通过重做日志:redo log日志,对于用户将对发生了修改而为提交的数据存入了redo log日志中,当此时发生断电等其他异常时,可以根据redo log日志重新对数据做一个提交,做一个恢复。

3、隔离性:

1事务的并发问题:

1、脏读(读未提交)

(1)、脏读:事务A读取到了事务已经修改但未提交的数据,这种数据就叫脏数据,是不正确的

2、读已提交:(不可重复读)

不可重复读:对于事务A多次读取同一个数据时,由于其他是事务也在访问这个数据,进行修改且提交,对于事务A,读取同一个数据时,有可能导致数据不一致,叫不可重复读

3、可重复读:(幻读)

幻读:原因:因为mysql数据库读取数据时,是将数据放入缓存中,当事务B对数据库进行操作:例如删除所有数据且提交时,事务A同样能访问到数据,这就产生了幻读。
问题:解决了可重复读,但是会产生一种问题,错误的读取数据,对于其他事务添加的数据也将访问不到

4、串行化

串行化:事务A和事务B同时访问时,在事务A修改了数据,而没有提交数据时,此时事务B想增加或修改数据时,只能等待事务A的提交,事务B才能够执行。

**问题:**用户的体验十分的差,因为每次访问时都要等待其他事务的提交才能操作

伴随着对应的解决方案:

2事务的隔离等级:

隔离性的隔离级别

  1. 读未提交 read uncommitted
  2. 读已提交 read committed
  3. 可重复读 repeatable read
  4. 串行化 serializable

(1)、读未提交:事物A和事物B,事物A未提交的数据,事物B可以读取到。 这种隔离级别最低,这种级别一般是在理论上存在,数据库隔离级别一般都高于该级别。 三种并发问题都没解决。

set global transaction isolation level read uncommitted;
#查看当前隔离级别
select @@global.tx_isolation,@@tx_isolation;

(2)、读已提交:事务A只能读取到事务B提交的数据,这种级别可以避免“脏数据” ,这种隔离级别会导致“不可重复读取” ,Oracle默认隔离级别

set global transaction isolation level read committed;
查看当前隔离级别
select @@global.tx_isolation,@@tx_isolation;

(3)、可重复读:- 事务A和事务B,事务A提交之后的数据,事务B读取不到 - 事务B是可重复读取数据 - 这种隔离级别高于读已提交 - 换句话说,对方提交之后的数据,我还是读取不到 - 这种隔离级别可以避免“不可重复读取”,达到可重复读取 - 比如1点和2点读到数据是同一个 - MySQL默认级别 - 虽然可以达到可重复读取,但是会导致“幻像读”

set global transaction isolation level repeatable read;
查看当前隔离级别
select @@global.tx_isolation,@@tx_isolation;

(4)、串行化:事务A和事务B,事务A在操作数据库时,事务B只能排队等待 这种隔离级别很少使用,吞吐量太低,用户体验差 这种级别可以避免“幻像读”,每一次读取的都是数据库中真实存在数据,事务A与事务B串行, 而不并发

set global transaction isolation level serializable;查看当前隔离级别
select @@global.tx_isolation,@@tx_isolation;

3隔离级别的一致性的关系:

三、事务的相关技术代码

  • 开启事务:START TRANSACTION
  • 事务的提交:COMMIT
    ages/image-20220605111202527.png" alt=“image-20220605111202527” style=“zoom:80%;” />

三、事务的相关技术代码

  • 开启事务:START TRANSACTION
  • 事务的提交:COMMIT
  • 事务的回滚:ROLLBACK (一旦事务提交失败,我们需要将数据回滚到之前的状态,需要用到rollback语句)

mysql事务(详解)相关推荐

  1. Spring事务和MySQL事务详解面试

    文章目录 数据库事务 事务是什么 事务的四大特性 MySQL事务隔离级别 查看MySQL当前事务隔离级别 MySQL默认操作模式为自动提交模式 JDBC处理事务 Spring事务 Spring的事务传 ...

  2. MySQL 事务详解

    前言 要么全都带走,要么一无所有. ---- 卡牌大师 崔斯特 在实际业务场景中,如何保证操作的完整性是一个重要的议题,依次执行一系列逻辑强关联的操作,如果在中途发生了错误,就很有可能导致数据的错乱. ...

  3. SpringBoot事务详解

    文章目录 一.简介 1.介绍 2.事务特点 3.事务实现方式 3.1 MySql事务实现方式 3.2 SpringBoot实现机制 二.@Transactional详解 1.@Transactiona ...

  4. mysql dba系统学习-数据库事务详解

    mysql dba系统学习-数据库事务详解 上个星期去面试数据库管理员的工作,笔试通过之后就是直接的面试,他问了我一个问题,叫我介绍哈数据库的事务的看法和理解,但是不知所错的没有章法的乱答一气,唉唉, ...

  5. 史上最简单MySQL教程详解(进阶篇)之存储引擎介绍及默认引擎设置

    什么是存储引擎? MySQL存储引擎种类 MyISAM 引擎 InnoDB引擎 存储引擎操作 查看存储引擎 存储引擎的变更 修改默认引擎 什么是存储引擎? 与其他数据库例如Oracle 和SQL Se ...

  6. mysql权限和使用注意事项及mysql 数据类型详解和innodb,myisam区别

    mysql用户权限管理(Grant,Revoke) MySQL可以为不同的用户分配严格的.复杂的权限.这些操作大多都可以用SQL 指令Grant(分配权限)和Revoke(回收权限)来实现. Gran ...

  7. Spring源码(八):Spring事务详解

    Spring事务详解 一.事务执行流程 二.Spring事务切面 三.事务切面的Pointcut和Advice 四.注解事务的源码分析 五.Sping事务的传播属性 六.Sping事务的异常校验 七. ...

  8. pandas读写MySQL数据库详解及实战

    pandas读写MySQL数据库详解及实战 SQLAlchemy是Python中最有名的ORM工具. 关于ORM: 全称Object Relational Mapping(对象关系映射). 特点是操纵 ...

  9. Mysql Explain 详解

    Mysql Explain 详解 一.语法 explain < table_name > 例如: explain select * from t3 where id=3952602; 二. ...

  10. MySQL存储过程详解 mysql 存储过程

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

最新文章

  1. java protobuffer 网络_使用Protobuf定义网络协议
  2. 手写Redis服务端,从设计者的角度聊一聊Redis本身
  3. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第9章-不确定分数阶系统的包含控制
  4. 领域应用 | 大众点评搜索基于知识图谱的深度学习排序实践
  5. java判断变量是奇书还是偶数_测试值是奇数还是偶数
  6. sr锁存器 数电_C06. SR锁存器的认识
  7. 解决办法:configure: error: You requested SRTP (requires libsrtp) but not found...die
  8. Js调用Paypal接口支付
  9. 【入门】萌新IP入门常识(一):什么是IP地址和代理IP
  10. 硬盘检测工具MHDD图文教程
  11. 使用C++ Builder编译QuantLib
  12. 怎么快速学会计算机程序知识,零基础学电脑怎样才能学得快,自学电脑的基础知识分享...
  13. qlabel 里内容字体颜色位置不同样式设置_OR视觉丨这4款应用就是我手机里必备的修图APP...
  14. 少儿编程Scratch学习教程--Scratch介绍及参赛相关
  15. 数据化运营14 洞察与获客:如何⾼效拉新获客?
  16. 学机器人编程课以后有用吗
  17. 电化学发光分析仪常用分析方法
  18. C++ 模板类的嵌套
  19. Hexo 博客加入豆瓣读书界面(综合教程)
  20. Springboot集成使用swagger2

热门文章

  1. 12. SSL和TLS有关知识
  2. 弟弟的作业(湖南省第六届程序设计大赛)
  3. Linux卸载搜狗输入法
  4. STC15单片机-ADC获取环境温度(NTC热敏电阻)
  5. 学习三极管的原理和作用
  6. hazelcast-management-center安装配置
  7. Lync 小技巧-41-Lync 2013-无法上载-PowerPoint
  8. phonegap 修改app的名称
  9. 液晶面板里面有些什么配件_液晶面板的种类有哪些
  10. PHP实现 网页图片上传