mysql 事务的ACID四大特性和四大事务隔离级别

苹果越分享越少,知识越分享越多

事务的ACID四大特性

原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不执行。

一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。

隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其它事务隔离开来,防止数据损坏。

持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。

四种事务隔离级别

Read uncommitted

《高性能mysql》中对 Read uncommitted 级别的描述


image.png
  • 简称 RU 级别
  • 在该级别事务中的对数据的修改,即使没有提交,对其他事务也是可见的
  • 在该级别下会出现 脏读、不可重复度、幻读、更新丢失的事务并发问题
  • 将当前会话设置成 Read uncommitted 级别
set session transaction isolation level read uncommitted;
Read committed

《高性能mysql》中对 Read committed 级别的描述


image.png
  • 简称 RC 级别
  • 该级别解决了脏读的问题。但是事务中会读到其他事务已提交的数据,无法保证读一致性,会造成不可重复读的问题。
  • 在该级别下会出现 不可重复读、幻读、更新丢失 的事务并发问题
  • 将当前会话设置成 Read committed
set session transaction isolation level read committed;
Repeatable read [rɪˈpiːtəbl]

《高性能mysql》中对 Repeatable read 级别的描述


image.png
  • 简称 RR 级别
  • RR 是 mysql的默认隔离级别
  • 该隔离级别下mysql的 innodb引擎 使用 MVCC机制保证了事务中的快照读一致性。不能完全杜绝幻读,还是会出现一个幻读的情况。当我们是用insert(当前读) 时会出现幻读
  • 该级别下会出现 幻读、更新丢失 的事务并发问题;
  • 将当前会话设置成 Repeatable Read
 set session transaction isolation level repeatable read;

关于mysql中的mvcc机制,我的这篇文章有讲https://www.jianshu.com/p/5f841f3fc288

Serializable

《高性能mysql》中对 Serializable 级别的描述


image.png
  • 强制事务串行执行、对表的任何操作都会上锁,可能导致大量超时和锁竞争
  • 在该隔离级别下不会出现所有的事务并发问题
  • 将当前会话设置成 Serializable
set session transaction isolation level serializable ;

事务隔离级别和事务并发问题的关系

事务隔离级别 事务并发问题
Read uncommitted 脏读、幻读、不可重复读、更新丢失
Read committed 脏读、幻读、更新丢失
Repeatable read 幻读、更新丢失
Read committed

关于事务并发问题,我这篇文章有讲
https://www.jianshu.com/p/dcd0be7573ac

命令

  • 设置全局的隔离级别,最好重启服务应用更改
set global transaction isolation level read committed; //全局的
  • 查询全局和当前会话的事务隔离级别
SELECT @@global.tx_isolation, @@tx_isolation;

你可能感兴趣的:(mysql 事务的ACID四大特性和四大事务隔离级别)