Mysql隔离级别
Mysql隔离级别
其实以前对隔离级别的概念不是很清除,但是在学习spring事务的时候就更加迷惑了,所有就准备系统的复习一下mysql隔离级别
环境sql
懒的建表,用的是mybatis-plus的demo 加了一个钱的字段
四种隔离等级
read-uncommitted 读未提交
read-committed 读已提交
repeatable-read 可重复读
serializable 序列化
查看默认的隔离级别
Serializable
改一下隔离级别
我们运行前2句sql,启动一个事务但是不要提交;
我们在启动一个事务去提交,这里都运行 将张三的钱更改成1块钱
我们可以看见第二个事务会一直卡住,它会等待第一个事务结束后才会执行
知道我们的事务超时,或者是上一个事务提交了
结论
很明显 最安全但是最慢
repeatable-read 可重复读
改一下隔离级别
我们启动一个事务去查询张三的钱 不要提交事务
我们可以看见为100元, 我们用另一个事务将钱改成1000元
我们可以看见钱已经被我们改成1000元了,但是在之前没有提交的事务中查询,我们查到的还是100元
直到事务提交后,才能查到最新的值
结论
在同一事务中同一sql查询到的值是相同的
这个隔离级别 会产生幻读的问题
模拟一个业务场景
我们需要查询用户名zhangsan是否存在,如果存在则删除张三,
这个时候我们启动一个事务去查询zhangsan,查询到准备删除,这个时候第二个事务把张三删除了,第二个事务提交了,导致第一个事务删除的时候报错了,这就是幻读.
在模拟一个业务场景
我们需要查询用户名zhangsan是否存在,如果不存在则创建张三,
这个时候我们启动一个事务去查询zhangsan,没查询到准备添加,这个时候第二个事务添加了张三,第二个事务提交了,然后第一事务也提交了,导致目前数据库中就有2个为zhangsan 的用户了,登陆时就会有问题;
但是一般账号都会设置为唯一索引,所以第一个事务就会抛出异常.这就是幻读,
read-committed
改一下隔离级别
结论
在同一事务中,同样的sql读取的数据不同,可以读取到其他事务已经提交的数据
存在不可重复读,和幻读的问题
read-uncommitted
改一下隔离级别
结论
会读取到其他事务没有提交的数据
会出现 脏读,不可重复读,和幻读
__EOF__

本文链接:https://www.cnblogs.com/immortal-mode/p/15784809.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2021-01-10 Json
2021-01-10 SpringMVC
2021-01-10 ssm整合