大发UU直播快三官方_大发UU直播快3

MySQL的4种事务隔离级别你还不清楚吗?

时间:2019-12-28 23:36:57 出处:大发UU直播快三官方_大发UU直播快3

大伙儿将 id=1 的用户 account 减 500。倘若查询,发现 id=1 的用户 account 变为 5000。

在 B 用户所在的会话中查询:

具体用户 A 的操作如下:

机会等待的图片 的图片 期间大伙儿用户 B 所在的会话事务提交,这麼用户 A 所在的事务的写操作将提示操作成功。

结论四:当大伙儿将当可不可以 话的隔离级别设置为 serializable 的之后 ,许多会话对该表的写操作将被挂起。还才能就看,这是隔离级别中最严格的,倘若从前做势必对性能造成影响。好多好多 在实际的选泽上,大伙儿要根据当前具体的情况汇报选泽共要的。

用户 B 的操作如下:

在用户 B 所在的会话中大伙儿执行下面操作:

现在有个需求,好多好多 老板说在同三个白 多事务中查询结果时要保持一致,机会你是数据库,我就咋样做?数据库是这麼做的。

在会话 B 中大伙儿当前事务隔离级别为 repeatable read。具体操作如下:

现在想把数据库这块采集出来,尽量用最简洁的语言描述出来,供新人参考。

倘若往表中插入两条数据,插入后结果如下:

回到 B 用户所在的会话,大伙儿查询结果:

在会话 B 中查询结果如下:

结论一

大伙儿将事务隔离级别设置为 read uncommitted,即便是事务这麼 commit,倘若大伙儿仍然能读到未提交的数据,这是所有隔离级别中最低的两种

这麼这麼做有那些问题 吗?那好多好多 大伙儿在三个白 多事务中还才能随随便便读取到许多事务未提交的数据,这还是比较麻烦的,大伙儿叫脏读。告诉我你你是什么 名字是咋样起的,为了增强大伙儿的印象,还才能这麼想,你你是什么 事务好轻浮啊,饥渴到连别人没提交的东西都等不及,真脏,呸!

结果如下:

倘若大伙儿查询看数据插入算是 成功:

大伙儿会发现数据并这麼变,还是 50000。

接着在会话 A 中大伙儿将事务提交:

结论二:

当大伙儿将当可不可以 话的隔离级别设置为 read committed 的之后 ,当可不可以 话不到读取到许多事务提交的数据,未提交的数据读不到。

这麼这麼做有那些问题 吗?那好多好多 大伙儿在会话 B 同三个白 多事务中,读取到两次不同的结果。这就造成了不可重复读,好多好多 两次读取的结果不同。你你是什么 问题 叫不可重复读。

用户 B 在他所在的会话中想插入一根新数据 id=3,value=50000。来大伙儿操作下:

大伙儿在 A 用户所在会话中为表 account 添加一根数据:

同样,大伙儿将用户 B 所在的会话的事务隔离级别设置为 serializable 并开启事务。

之后 大伙儿在 A 用户中查询数据,结果如下:

有那些问题 吗?管他呢,老板的要求满足了。要三个白 多事务中读取的数据一致(可重复读)。我不到这麼做啊,打肿脸装大胖子。数据机会地处改变,咋样我就还是要保持一致。倘若,总出 了用户 B 面对的问题 ,你你是什么 问题 叫幻读(记得当时就在你你是什么 地方纠结几时,到底那些是幻读啊)。

首先创建三个白 多表 account。创建表的过程略过(机会 InnoDB 存储引擎支持事务,好多好多 将表的存储引擎设置为 InnoDB)。表的型态如下:

那些?竟然插不进去,说我数据重复?

用户 B 当然不服啊,机会查询到数据不到两条啊,为那些插入 id=3 说我数据重复了呢?

我再就看,莫非我眼花了?

为了说明问题 ,大伙儿打开三个白 多控制台分别进行登录来模拟三个白 多用户(何必 成为用户 A 和用户 B 吧),并设置当前 MySQL 会话的事务隔离级别。

接着在会话 B 中查询数据:

大伙儿发现用户 A 所在的会话陷入等待的图片 ,机会超时(你你是什么 时间还才能进行配置),会总出 Lock wait time out 提示:

结果如下:

试想一下,在实际中用户 A 和用户 B 肯定是相互隔离的,彼此告诉我操作那些。用户 B 碰到你你是什么 问题 ,肯定会炸毛的啊,明明不地处的数据,插入好多好多 主键 id=3 数据重复了。

结论三:当大伙儿将当可不可以 话的隔离级别设置为 repeatable read 的之后 ,当可不可以 话还才能重复读,好多好多 每次读取的结果集都相同,而不管许多事务有这麼提交。

结果如下:

从前们你你是什么 之后 在用户 A 所在的会话中写数据呢?

同样的最好的措施,大伙儿将用户 B 所在的会话当前事务隔离级别设置为 read commited。

在用户 A 所在的会话中大伙儿执行下面操作:

update account set account=account-500 where id=1;

热门

热门标签