面试问烂的MySQL四种隔离级别,看完吊打面试官!
B:回滚事务 A:再次读数据,发现数据变回初始状态 经过上面的实验可以得出结论,事务B更新了一条记录,但是没有提交,此时事务A可以查询出未提交记录。造成脏读现象。未提交读是最低的隔离级别。 将客户端A的事务隔离级别设置为read committed(已提交读) A:启动事务,此时数据为初始状态 B:启动事务,更新数据,但不提交 A:再次读数据,发现数据未被修改 B:提交事务 A:再次读取数据,发现数据已发生变化,说明B提交的修改被事务中的A读到了,这就是所谓的“不可重复读” 经过上面的实验可以得出结论,已提交读隔离级别解决了脏读的问题,但是出现了不可重复读的问题,即事务A在两次查询的数据不一致,因为在两次查询之间事务B更新了一条数据。已提交读只允许读取已提交的记录,但不要求可重复读。 将A的隔离级别设置为repeatable read(可重复读) A:启动事务,此时数据为初始状态 B:启动事务,更新数据,但不提交 A:再次读取数据,发现数据未被修改 B:提交事务 A:再次读取数据,发现数据依然未发生变化,这说明这次可以重复读了 B:插入一条新的数据,并提交 A:再次读取数据,发现数据依然未发生变化,虽然可以重复读了,但是却发现读的不是最新数据,这就是所谓的“幻读” A:提交本次事务,再次读取数据,发现读取正常了 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |