oracle 脏读,脏读 不可重复读 幻读

这篇博客介绍了数据库事务中的脏读、不可重复读和幻读现象,通过实例阐述了它们的区别。文章指出脏读发生在未提交修改被其他事务读取,不可重复读是相同查询在不同时间返回不同结果,而幻读则是在同一查询条件下,事务前后读取的行数不一致。解决这些问题可通过设置不同的事务隔离级别,如READ_COMMITTED、REPEATABLE_READ和SERIALIZABLE。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序言

脏读、不可重复读、幻读这几个概念开始接触和学习的时候是在大学学习数据库系统的时候,那时候对这几个专业名词的理解停留在概念文字上,并没有真正使用过实践中,最近工作中涉及到这几个概念方面的知识,就来整理一下。

这几个名词涉及到的内容有事务、事务的隔离级别等

1. 脏读

脏读就是指当一个事务A正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务B也访问这个数据,然后使用了这个数据,这就是脏读。

例子:

1.库存的原有资产数量为1000, 仓库管理人员将库存数量改为了8000(但未提交事务)

2.盘点员盘点仓库资产数量 ,发现变为了8000,欢天喜地!

3.而仓库管理员发现操作有误,回滚了事务, 资产数量又变为资产数量了1000 像这样, 盘点员记取的资产数量8000是一个脏数据。

2. 不可重复读

不可重复读指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。

例子:

1.在事务1中,盘点员 读取了资产数量为1000,操作并没有完成

2.在事务2中,这时仓库管理员修改了资产数量为2000,并提交了事务.

3.在事务1中,盘点员 再次读取资产数量时,资产数量变为了2000

解决办法:如果只有在修改事务完全提交之后才可以读取数据,则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值