Mysql的ACID、事务并发、事务隔离级别

目录

一、事务的基本要素(ACID)

A:Atomicity,即原子性;

C:Consistency,即一致性;

I:Isolation,即隔离性;

D:Durability,即持久性;

二、事务的并发问题

1. 脏读:

2. 不可重复读:

3. 幻读:

三、Mysql的事务隔离级别


一、事务的基本要素(ACID)

A:Atomicity,即原子性;

事务开始后的所有操作,要么全部完成,要么全部不完成,不会停留在中间环节;事务执行过程中出错,会回滚到事务开始前的状态,也就是说事务是一个不可分割的整体。

ps:flume的put和take事务也是通过错误回滚机制实现事务性的

C:Consistency,即一致性;

事务开始前和结束后,数据库的完整性约束并没有被破坏,例如A给B转账,A扣了钱,B不可能没收到。

I:Isolation,即隔离性;

同一时间,只允许一个事务请求同一数据,不同事务之间不会存在干扰;例如A用一张银行卡取钱,在取完钱之前,B不能往这张卡里转账。

D:Durability,即持久性;

事务完成后,事务对于数据库所做的更新将会持久化保存在数据库中,不能回滚。

 

二、事务的并发问题

1. 脏读:

事务A读取了事务B的数据,然后B进行数据回滚,A读到的是脏数据。

2. 不可重复读:

事务A多次重复读取同一数据,事务B在事务A多次读取的过程中,对数据做了更新和提交,导致A每次读取到的同一数据的结果不一致。

解决途径:锁住每次重复读取的行,用行锁

3. 幻读:

事务A第一次查询数据,得到一个结果;然后事务B插入一条数据,事务A第二次查询数据时,多了一条数据,就好像发生了幻觉一样。

解决途径:锁住整张表,用表锁

区别点:

不可重复读侧重于修改,幻读侧重于增加和删除数据,解决途径分别是使用mysql的行锁和表锁

 

三、Mysql的事务隔离级别

1. 读未提交:脏读、不可重复读、幻读都可以发生

2. 不可重复读:不会发生脏读,但可能发生不可重复读和幻读

3. 可重复读:不会发生脏读和不可重复读,但是会发生幻读

4. 串行化:脏读、不可重复读、幻读都不会发生,事务隔离级别最高

ps:mysql默认的事务隔离级别是可重复读

你可能感兴趣的:(MySQL)