ACID

原子性

一个事务是不可分开的,要么一起成功,要么一起失败

一致性

事务在执行时,数据库的完整性约束没有被破坏

隔离性

多个事务并发的时候,事务之间是隔离的,互不影响

持久性

事务完成后,该事务对数据库的更改持久到数据库中,更改是永久的

隔离级别

读未提交

一个事务还没有提交的时候,他的更改可以被其他事务看到

读提交

一个事务提交以后,他做的更改才会被其他事务看到

可重复读

一个事务在执行过程中所看到的数据总是和这个事务启动时看到的数据是一致的

序列化

对同一行数据,读会加读锁,写会加写锁,读写锁冲突,必须等其中一个事务完成,另一个事务才可以继续

image.png

  • 读未提交 v1是2 v2是2 v3是2
  • 读提交 v1是1 v2是2 v3是2
  • 可重复读 v1是1 v2是1 v3是2
  • 序列化 v1是1 v2是1 v3是2

MVCC

事务在启动时候mysql会启动一个视图,访问的时候以视图为准,在可重复读隔离级别下,视图在事务启动的时候就创建,而在读提交隔离级别下,视图是在事务中的sql开始执行的时候创建的,其他隔离级别没有视图的概念