一丶mysql事物

63 阅读2分钟

一丶mysql的存储引擎

  1. InnoDB

支持行锁和事务

  1. MyISAM

不支持事务,访问速度快,适用于查询多的场景

二丶 事务ACID特性

A:(Atomicity)原子性:一些列操作要么全部成功,要么全部失败

C:(Consistency)一致性:数据库总时从一个一致状态变到另一个一致状态(事务修改前后的数据总体保证一致)

I:(Isolation)隔离性:事务的结果只有提交了其他事务才可见

D:(Durability)持久性:事务提交后,对数据修改永久的

实现逻辑

A: 原子性通过undo log实现。

I: 隔离性通过mvcc实现。

C&D:一致性和持久性通过redo log实现

三丶事务的隔离级别

读未提交、读已提交、可重复读、可序列化

  1. 读未提交

    一个事务对一条数据进行查询的时候,可以看到其他事务对这条数的修改但是未提交的数据。

  2. 读已提交

    一个事务对一条数据进行查询的时候,可以看到其他事务对这条数的修改已经提交的数据。

  3. 可重复读

    可重复读是指在同一个事务内,多次读取同一个数据,在可重复读的这一级别上,事务不会被看成一个序列。

  4. 序列化

    当隔离级别为序列化时,用户之间通过一个接着一个的执行当前事务,不能并发执行。这种隔离级别提供了事务之间最大限度的隔离

四丶脏读、不可重复读、幻读

脏读

一个事务读取到另一个事务还没有提交的数据

不可重复读

在一个事务中多次读取同一个数据时,结果出现不一致

幻读

在一个事务中,使用相同的 SQL 两次读取,第二次读取到其他事务新插入的行

**不可重复读注重于数据的修改,而幻读注重于数据的插入

五丶隔离级别解决问题

图片.png