CC00038.bigdatajava——|Java&MySQL单表/约束/事务.V16|——|MySQL.v16|脏读演示及解决|

本文通过实例演示了在MySQL中可能出现的脏读情况,并详细解释了解决脏读问题的步骤,包括调整数据库隔离级别等措施。
摘要由CSDN通过智能技术生成
一、脏读演示
### --- 脏读演示

——>        脏读: 一个事务读取到了另一个事务中尚未提交的数据
二、打开窗口登录 MySQL,设置全局的隔离级别为最低
### --- 登录是MySQL

——>        使用db2数据库
use db2;
——>        设置隔离级别为最低 读未提交
set global transaction isolation level read uncommitted;
### --- 关闭窗口,开一个新的窗口A ,再次查询隔离级别

——>        开启新的 窗口A
——>        查询隔离级别
查询隔离级别
### --- 再开启一个新的窗口B

~~~     # 查询数据,本次查询用户的账户余额都为1000
——>        登录数据库
——>        选择数据库
use db2;
——>        开启事务
start transaction;
——>        查询
select * from account;
### --- A窗口执行

——>        选择数据库
use db2;
——>        开启事务
start transaction;
——>        执行修改操作
-- tom账户 -500元
UPDATE account SET money = money - 500 WHERE NAME = 'tom';
-- jack账户 + 500元
UPDATE account SET money = money + 500 WHERE NAME = 'jack';
### --- B窗口查询操作

——>        查询账户信息
select * from account;
### --- A窗口转账异常,进行回滚

~~~     # A窗口的事务执行,出现异常进行回滚
rollback;
### --- B窗口再次进行查询账户

~~~     # 由于A窗口执行出现异常,对事务进行了回滚,B窗口再次进行查询时,发现前又不见了。
select * from account;
三、结局脏读问题
### --- 结局脏读问题

——>        脏读非常危险的,比如张三向李四购买商品,张三开启事务,向李四账号转入 500 块,
——>        然后打电话给李四说钱 已经转了。李四一查询钱到账了,发货给张三。
——>        张三收到货后回滚事务,李四的再查看钱没了。
——>        解决方案
——>        将全局的隔离级别进行提升为: read committed
### --- 在A窗口设置全局的隔离级别为read committed

set global transaction isolation level read committed;
### --- 重新开启A窗口,查看设置是否成功
select @@tx_isolation;

### --- 开启B窗口,A和B窗口选择数据库后,都开启事务
### --- A窗口只是更新两个账户,不提交事务

-- tom账户 -500元
UPDATE account SET money = money - 500 WHERE NAME = 'tom';
-- jack账户 + 500元
UPDATE account SET money = money + 500 WHERE NAME = 'jack';
### --- B窗口进行查询,没有查询到未提交的数据

mysqlselect * from account;
### --- A窗口commit提交数据
commit;

### --- B窗口查看数据
select * from account;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值