一丶mysql的存储引擎
- InnoDB
支持行锁和事务
- MyISAM
不支持事务,访问速度快,适用于查询多的场景
二丶 事务ACID特性
A:(Atomicity)原子性:一些列操作要么全部成功,要么全部失败
C:(Consistency)一致性:数据库总时从一个一致状态变到另一个一致状态(事务修改前后的数据总体保证一致)
I:(Isolation)隔离性:事务的结果只有提交了其他事务才可见
D:(Durability)持久性:事务提交后,对数据修改永久的
实现逻辑
A: 原子性通过undo log实现。
I: 隔离性通过mvcc实现。
C&D:一致性和持久性通过redo log实现
三丶事务的隔离级别
读未提交、读已提交、可重复读、可序列化
-
读未提交
一个事务对一条数据进行查询的时候,可以看到其他事务对这条数的修改但是未提交的数据。
-
读已提交
一个事务对一条数据进行查询的时候,可以看到其他事务对这条数的修改已经提交的数据。
-
可重复读
可重复读是指在同一个事务内,多次读取同一个数据,在可重复读的这一级别上,事务不会被看成一个序列。
-
序列化
当隔离级别为序列化时,用户之间通过一个接着一个的执行当前事务,不能并发执行。这种隔离级别提供了事务之间最大限度的隔离
四丶脏读、不可重复读、幻读
脏读
一个事务读取到另一个事务还没有提交的数据
不可重复读
在一个事务中多次读取同一个数据时,结果出现不一致
幻读
在一个事务中,使用相同的 SQL 两次读取,第二次读取到其他事务新插入的行