当前位置: 首页 > news >正文

事务学习一

javaweb学习总结(三十八):事务_javaweb中a账户给b账户转账-CSDN博客

5.3、使用MySQL数据库演示不同隔离级别下的并发问题

  同时打开两个窗口模拟2个用户并发访问数据库

1、当把事务的隔离级别设置为read uncommitted时,会引发脏读、不可重复读和虚读

  A窗口
    set transaction isolation level  read uncommitted;--设置A用户的数据库隔离级别为Read uncommitted(读未提交)
    start transaction;--开启事务
    select * from account;--查询A账户中现有的钱,转到B窗口进行操作
    select * from account--发现a多了100元,这时候A读到了B未提交的数据(脏读)

  B窗口
    start transaction;--开启事务
    update account set money=money+100 where name='A';--不要提交,转到A窗口查询

2、当把事务的隔离级别设置为read committed时,会引发不可重复读和虚读,但避免了脏读

  A窗口
    set transaction isolation level  read committed;
    start transaction;
    select * from account;--发现a帐户是1000元,转到b窗口
    select * from account;--发现a帐户多了100,这时候,a读到了别的事务提交的数据,两次读取a帐户读到的是不同的结果(不可重复读)
  B窗口
    start transaction;
    update account set money=money+100 where name='aaa';
    commit;--转到a窗口

3、当把事务的隔离级别设置为repeatable read(mysql默认级别)时,会引发虚读,但避免了脏读、不可重复读

  A窗口
    set transaction isolation level repeatable read;
    start transaction;
    select * from account;--发现表有4个记录,转到b窗口
    select * from account;--可能发现表有5条记录,这时候发生了a读取到另外一个事务插入的数据(虚读)
  B窗口
    start transaction;
    insert into account(name,money) values('ggg',1000);
    commit;--转到a窗口

4、当把事务的隔离级别设置为Serializable时,会避免所有问题

  A窗口
    set transaction isolation level Serializable;
    start transaction;
    select * from account;--转到b窗口

  B窗口
    start transaction;
    insert into account(name,money) values('ggg',1000);--发现不能插入,只能等待a结束事务才能插入


http://www.mrgr.cn/news/61360.html

相关文章:

  • Web开发(一)HTML5
  • firefox PAC代理
  • 【Rust自学】11.9. 单元测试
  • 牛客周赛 Round 76题解
  • 基于vue框架的的校园生活服务平台8vwac(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • VSCode 中的 launch.json 配置使用
  • 年薪百万打工人自爆:我的大厂生存指南!
  • 使用DeepLabV3实现植叶病害检测
  • File类踩坑记录
  • 细胞核荧光探针(一):一种红色发光、NADPH响应的的喹啉基
  • 【点云异常点检测数据集】Real3D-AD数据集介绍
  • 基于SSM大学生互动交流网站设计与实现
  • 四元数各个旋转API的使用
  • 【JSON相关漏洞(Hijacking+Injection)挖掘技巧及实战案例全汇总】
  • mongo实操笔记
  • 美团外卖霸王餐系统如何对接?有哪些具体步骤?
  • Java Lock LockSupport 源码
  • 代码学习:如何阅读开源代码
  • 网络搜索引擎Shodan(6)
  • 今日总结10.29
  • 重学SpringBoot3-怎样优雅停机
  • 基于ssm+jsp639实验室排课系统设计与实现
  • 力扣每日一题 3211. 生成不含相邻零的二进制字符串
  • 代码随想录 | Day35 | 动态规划 :最小花费爬楼梯不同路径不同路径II
  • Spring Cloud 和 Dubbo 的区别
  • 超好玩又简单-猜数字游戏(有手就行)