10-1-2-2 事务的隔离机制
2022/4/16 23:42:42
本文主要是介绍10-1-2-2 事务的隔离机制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
数据库多是并发执行的,因为隔离性的原因会带来一些问题
事务的四个隔离级别
序号 | 隔离级别 | 功能 |
---|---|---|
1 | read uncommitted | 读取未提交的数据 |
2 | read committed | 读取已经提交的数据 |
3 | repeatable read | 重复读取 |
4 | serializeable | 序列化 |
业务案例1
事务a和事务b都去买票,a买了未提交,之后b买了提交了
a事务就要执行回滚操作,这样对于a来说反复的购票失败是一个不好的体验,故需要它能读取到其他事务的临时数据
修改事务隔离级别
-
READ UNCOMMITTED 代表可以读取其他事务未提交的数据
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
START TRANSACTION; UPDATE t_emp SET sal=1;
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; START TRANSACTION; SELECT empno,ename,sal FROM t_emp; COMMIT;
业务案例2
事务b转出100元,但未提交,此时事务a转入1000元,如果a可以读取b的临时数据,则此时账号内应该为4900再加1000元=5900元,此时去读账户,里面只有5900元,但此时b回滚操作后,账务内有6000元,对于前一个用户来说这是不合理的。
(但是上述情况再MySQL中好像实现不了)
修改事务隔离级别
-
READ COMMITTED 代表可以读取其他事务已经提交的数据
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION; UPDATE t_emp SET sal=1;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; START TRANSACTION; SELECT empno,ename,sal FROM t_emp; COMMIT;
业务案例3
事务a去买东西,再选中一个商品,准备付款的时候,事务b将商品涨价,此时事务a应该是不管怎么刷新当前页面都是适用原价购买,而不适用涨价后的价格购买
-
REPEATABLE READ 代表事务在执行中反复读取数据、得到的结果是一致的,不会受到其他事务的影响
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
这里需要注意的点,就是要执行SQL语句后,才会再redo日志中留下标记的数据,这样才可以重复读取数据
事务的序列化
-
由于事务并发执行所带来的问题,前三种隔离级别只适用在某些业务场景中,但是序列化的隔离性,让事务逐一执行,就不会产生上述问题了
SET SESSION TRANSACITON ISOLATION LEVEL SERIALIZABLE;
这篇关于10-1-2-2 事务的隔离机制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-01为什么公共事业机构会偏爱 TiDB :TiDB 数据库在某省妇幼健康管理系统的应用
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署