【Mysql高级】【第十三章】【 事务基础知识】

事务基础知识

  • 1. 数据库事务概述
    • 1.1 存储引擎支持情况
    • 1.2 基本概念
    • 1.3 事务ACID特性
    • 1.4 事务的状态
  • 2. 如何使用事务
    • 2.1 显式事务
    • 2.2 隐式事务
    • 2.3 隐式提交数据的情况
    • 2.4 使用举例1:提交和回滚
    • 2.5 使用举例2:测试不支持事务的engine
    • 2.6 使用举例3:SAVEPOINT
  • 3. 事务隔离级别
    • 3.1 数据准备
    • 3.2 数据并发问题
      • 1.脏写
      • 2. 脏读
      • 3. 不可重复读
      • 4.幻读
      • 不可重复读和幻读的区别
    • 3.3 SQL标准中的四种隔离级别
    • 3.4 MySQL所支持的四种隔离级别
    • 3.5 如何设置事务的隔离级别
    • 3.6 不同隔离级别举例
      • 1.read-uncommit级别引发脏读问题演示
      • 2.read-commit级别引发不可重复读问题演示
      • 3.repeatable-read级别
      • 4. Serializable级别
  • 4. 事务的常见分类


1. 数据库事务概述

https://www.bilibili.com/video/BV1iq4y1u7vj?p=161

在这里插入图片描述

1.1 存储引擎支持情况

【Mysql高级】【第十三章】【 事务基础知识】_第1张图片

1.2 基本概念

【Mysql高级】【第十三章】【 事务基础知识】_第2张图片

1.3 事务ACID特性

在这里插入图片描述
【Mysql高级】【第十三章】【 事务基础知识】_第3张图片
【Mysql高级】【第十三章】【 事务基础知识】_第4张图片
【Mysql高级】【第十三章】【 事务基础知识】_第5张图片
【Mysql高级】【第十三章】【 事务基础知识】_第6张图片

1.4 事务的状态

【Mysql高级】【第十三章】【 事务基础知识】_第7张图片
【Mysql高级】【第十三章】【 事务基础知识】_第8张图片

2. 如何使用事务

https://www.bilibili.com/video/BV1iq4y1u7vj?p=162&spm_id_from=pageDriver
【Mysql高级】【第十三章】【 事务基础知识】_第9张图片

2.1 显式事务

【Mysql高级】【第十三章】【 事务基础知识】_第10张图片
【Mysql高级】【第十三章】【 事务基础知识】_第11张图片
【Mysql高级】【第十三章】【 事务基础知识】_第12张图片

  • 回滚到保存点的时候 事务 并没有结束(还需要进一步commit或者rollback)

2.2 隐式事务

自动提交
【Mysql高级】【第十三章】【 事务基础知识】_第13张图片

手动提交
【Mysql高级】【第十三章】【 事务基础知识】_第14张图片
对于DDL来说,都是自动提交!关闭事务自动提交只会影响DML
【Mysql高级】【第十三章】【 事务基础知识】_第15张图片

2.3 隐式提交数据的情况

【Mysql高级】【第十三章】【 事务基础知识】_第16张图片
在这里插入图片描述
【Mysql高级】【第十三章】【 事务基础知识】_第17张图片
【Mysql高级】【第十三章】【 事务基础知识】_第18张图片

2.4 使用举例1:提交和回滚

案例1
【Mysql高级】【第十三章】【 事务基础知识】_第19张图片

案例2:链式事务
【Mysql高级】【第十三章】【 事务基础知识】_第20张图片

【Mysql高级】【第十三章】【 事务基础知识】_第21张图片

2.5 使用举例2:测试不支持事务的engine

【Mysql高级】【第十三章】【 事务基础知识】_第22张图片

2.6 使用举例3:SAVEPOINT

【Mysql高级】【第十三章】【 事务基础知识】_第23张图片

3. 事务隔离级别

【Mysql高级】【第十三章】【 事务基础知识】_第24张图片

3.1 数据准备

【Mysql高级】【第十三章】【 事务基础知识】_第25张图片

3.2 数据并发问题

事务的隔离性要考虑多个线程操作同一个资源造成的多线程并发安全问题。

加锁可以非常完美的保证隔离性,但是这会造成数据库性能的大大下降。

  • 如果两个事务并发的修改——必须隔离开
  • 如果两个事务并发的查询——完全不用隔离
  • 如果一个事务修改,另一个事务查询——脏读、不可重复读、虚读

1.脏写

【Mysql高级】【第十三章】【 事务基础知识】_第26张图片
感觉和脏读一个尿性。。

2. 脏读

一个事务读取到另一个事务还未提交的数据;

【Mysql高级】【第十三章】【 事务基础知识】_第27张图片

3. 不可重复读

一个事务读取到另一个事务的更新并提交的数据
【Mysql高级】【第十三章】【 事务基础知识】_第28张图片

4.幻读

一个事务读取到另一个事务插入或者删除并提交的数据

对于两个事务 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入、删除 一些行,提交之后, 如果 T1 再次读取同一个表, 就会多出、少了几行

【Mysql高级】【第十三章】【 事务基础知识】_第29张图片

不可重复读和幻读的区别

【Mysql高级】【第十三章】【 事务基础知识】_第30张图片
【Mysql高级】【第十三章】【 事务基础知识】_第31张图片

3.3 SQL标准中的四种隔离级别

  • 并发性和隔离性是两个有冲突的性质;
  • 如何在保证隔离性的同时,提高并发性,就需要进行设计;每种隔离级别也对应着每种并发问题;

为了解决上面的三个问题,数据库提出四大隔离级别;隔离级别越高, 数据一致性就越好, 但并发性越弱。


【Mysql高级】【第十三章】【 事务基础知识】_第32张图片
【Mysql高级】【第十三章】【 事务基础知识】_第33张图片

【Mysql高级】【第十三章】【 事务基础知识】_第34张图片

3.4 MySQL所支持的四种隔离级别

在这里插入图片描述
【Mysql高级】【第十三章】【 事务基础知识】_第35张图片

3.5 如何设置事务的隔离级别

注意:无论是GLOBAL还是SESSION,只要是命令行修改,都只是内存级别,只要重启Mysql服务器,都会恢复默认值。

【Mysql高级】【第十三章】【 事务基础知识】_第36张图片
【Mysql高级】【第十三章】【 事务基础知识】_第37张图片

Global 演示
【Mysql高级】【第十三章】【 事务基础知识】_第38张图片
【Mysql高级】【第十三章】【 事务基础知识】_第39张图片
【Mysql高级】【第十三章】【 事务基础知识】_第40张图片

Session演示
【Mysql高级】【第十三章】【 事务基础知识】_第41张图片

3.6 不同隔离级别举例

1.read-uncommit级别引发脏读问题演示

【Mysql高级】【第十三章】【 事务基础知识】_第42张图片
【Mysql高级】【第十三章】【 事务基础知识】_第43张图片

2.read-commit级别引发不可重复读问题演示

【Mysql高级】【第十三章】【 事务基础知识】_第44张图片

3.repeatable-read级别

p168-幻读的演示和解决方案

repeatable-read 解决了不可重复读问题:

【Mysql高级】【第十三章】【 事务基础知识】_第45张图片

幻读现象演示

【Mysql高级】【第十三章】【 事务基础知识】_第46张图片

Mysql 在repeatable-read 级别下是如何解决幻读问题的?

【Mysql高级】【第十三章】【 事务基础知识】_第47张图片
【Mysql高级】【第十三章】【 事务基础知识】_第48张图片
具体的讲解在将MVCC的时候会解释;

4. Serializable级别

4. 事务的常见分类

【Mysql高级】【第十三章】【 事务基础知识】_第49张图片
【Mysql高级】【第十三章】【 事务基础知识】_第50张图片

【Mysql高级】【第十三章】【 事务基础知识】_第51张图片

【Mysql高级】【第十三章】【 事务基础知识】_第52张图片
【Mysql高级】【第十三章】【 事务基础知识】_第53张图片

你可能感兴趣的:(Mysql,mysql)