MySQL事务隔离级别

2019-02-23  本文已影响0人  woniu95

提到MySQL,相信大家一定都会想存储引擎,想到存储引擎,就一定会想到InnoDB,而提到InnoDB,就会想到事务,而提到事务,肯定会想到ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),这里就来总结下我所认识的I,即事务隔离。

事务隔离的概念和事务同时执行的问题

首先,我们要知道事务隔离是为什么出现的,一个技术的出现就是为了要解决问题,而事务隔离的出现就是为了解决多个事务同时执行时会出现的三个问题:脏读,不可重复读,幻读。这里先解释下这三个问题的概念。

1.脏读:事务A读取了事务B更新的数据,然后B回滚事务,A读取到的就是脏数据。

2.不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据做了更新并提交,导致事务A多次读取同一数据时,结果不一致。

3.幻读:事务A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是事务B就在这个时候插入了一条具体分数的记录,当A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样。

事务的隔离级别为:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(serializable )

这里概念不理解没关系,下面我会用一个例子来说明事务隔离和这几个概念。

隔离级别对应解决的问题

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitten)
读提交(read-committen)
可重复读(repeatable-read)
串行化(serilaizable)

MySQL的默认隔离级别是RR。

举个栗子🌰

使用如下语句建表

mysql> create table T(c int) engine=InnoDB;
insert into T(c) values(1);

image

在不同的隔离级别中我们来看看v1,v2,v3的值分别是什么?

总结

从这里我们可以看出每个隔离级别都有自己的使用场景,但是隔离级别越高,执行的效率就越低,所以要根据自己的业务场景来选择合适的隔离级别。

参考:①https://www.cnblogs.com/huanongying/p/7021555.html

https://time.geekbang.org/column/139

上一篇 下一篇

猜你喜欢

热点阅读