返回

mysql事务隔离级别与脏读、幻读、不可重复读

发布时间:2022-12-12 16:16:44 326
# mysql# 数据库# sql# 数据

mysql数据库,当且仅当引擎是InnoDB,才支持事务;

1、隔离级别

事务的隔离级别由低到高依次为分为:未提交读(read uncommitted)、已提交读(read committed)、可重复读(repeatable read)、串行化(serializable)。

1.1未提交读

A事务已执行,但未提交;B事务查询到A事务的更新后数据;A事务回滚;—出现脏数据

1.2已提交读

A事务执行更新;B事务查询;A事务又执行更新;B事务再次查询时,前后两次数据不一致;—不可重复读

1.3可重复读

A事务无论执行多少次,只要不提交,B事务查询值都不变;B事务仅查询B事务开始时那一瞬间的数据快照;

1.4串行化

不允许读写并发操作,写执行时,读必须等待;

mysql事务隔离级别与脏读、幻读、不可重复读_数据库

 

  脏读:(针对未提交的数据)一个事务在更新一条记录,未提交前,第二个事务读到了第一个事务更新后的记录,那么第二个事务就读到了脏数据,会产生对第一个未提交

数据的依赖。一旦第一个事务回滚,那么第二个事务读到的数据,将是错误的脏数据。

不可重复读:(读取数据本身的对比)一个事务在读取某些数据后的一段时间后,再次读取这个数据,发现其读取出来的数据内容已经发生了改变,就是不可重复读。

幻读:(读取结果集条数的对比)一个事务按相同的查询条件查询之前检索过的数据,确发现检索出来的结果集条数变多或者减少(由其他事务插入、删除的),类似产生幻觉。

2.数据库设置事务隔离级别

//查看当前事物级别:
SELECT @@tx_isolation;

MySQL 默认的级别是:Repeatable read 可重复读。

mysql事务隔离级别与脏读、幻读、不可重复读_隔离级别_02

//设置mysql的隔离级别:
set session transaction isolation level 设置事务隔离级别
//设置read uncommitted级别:
set session transaction isolation level read uncommitted;

//设置read committed级别:
set session transaction isolation level read committed;

//设置repeatable read级别:
set session transaction isolation level repeatable read;

//设置serializable级别:
set session transaction isolation level serializable;

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
kubernetes部署单节点Redis服务 2022-12-12 15:53:18