许吉友 - 运维

MySQL事务隔离级别详解

ACID 四大特性

ACID规则原来是在1970被Jim Gray定义,ACID事务解决了很多问题,但是仍然需要和性能做平衡协调,事务越强,性能可能越低,安全可靠性和高性能是一对矛盾。

ACID 与 CAP 的关系

事务机制ACID和CAP理论是数据管理和分布式系统中两个重要的概念,很不巧,这两个概念中都有相同的“C”代表 "Consistency" 一致性,但是实际上是完全不同的意义。

当跨分布式系统提供ACID时,这两个概念会混淆在一起,Google’s Spanner system能够提供分布式系统的ACID,其包含ACID+CAP设计:

什么是CAP

CAP是分布式系统中进行平衡的理论,它是由 Eric Brewer发布在2000年。

通常 CAP 只能取其二,不要或弱化第三个。

CAP 和 ACID一致性区别

ACID一致性是有关数据库规则,如果数据表结构定义一个字段值是唯一的,那么一致性系统将解决所有操作中导致这个字段值非唯一性的情况,如果带有一个外键的一行记录被删除,那么其外键相关记录也应该被删除,这就是ACID一致性意思。

CAP理论的一致性是保证同样一个数据在所有不同服务器上的拷贝都是相同的,这是一种逻辑保证,而不是物理,因为光速限制,在不同服务器上这种复制是需要时间的,集群通过阻止客户端查看不同节点上还未同步的数据维持逻辑视图。

隔离级别

隔离级别对应的是隔离性。

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。

事务存在的问题

可以这样理解,就是有一个大事务,这个大事务需要执行很长时间,另外还有一堆小事务,小事务很快就执行完了,小事务改完数据,进行了提交,大事务也读到了提交后的内容,但是小事务很多可能改了不止一次,这就造成了不可重复读!

在MySQL中,实现了这四种隔离级别,分别有可能产生问题如下所示:

隔离级别 脏读 不可重复读 幻读
Read Uncommitted(读未提交) 可能 可能 可能
Read Committed(读已提交) 不可能 可能 可能
Repeatable Read(可重读) 不可能 不可能 可能
Serializable(可串行化) 不可能 不可能 不可能