ORACLE的TX锁和TM锁及解锁

数据库是一个并发访问的系统,所以说对一个数据库来说最大的问题就是并发控制的问题,这个并发控制所表现的不是在并发读上面,而是在并发写上面。对应并发写,就需要保证数据的一致性!那么什么是是数据一致性呢? 先看看什么是数据的不一致性。

数据不一致性:
脏读
张三的存款是1000,早上10点某个做了一个update 变成10000 update xxx set money=10000 where xx 但是没有提交,10点过1分的时候张三去查发现他的钱变成了10000了,这个就是脏读,因为张三读取的是没有提交的数据


不可重复读取:
张三 700
。。。
。。。
李四 1000

在10点的时候有一个人发出了一个select * from t;的sql 先读取了张三700的这个记录, 10点过1分查询还在进行,这个时候有个用户做了一个转账,把从李四的卡里面转了300给张三,当用户读取到李四这个记录的时候,如果返回的结果是700,那么就是一个不可重复读

幻影读
10点发起了一个全表扫描,10点过1分的时候查询还在进行,然后在10点过2分insert了一条记录为vic,那么查询到这个记录的时候是否会读取,如果读取了那就是是一个幻影读


维护这几种数据库一致性oracle都是通过undo的方式去实现的





一致性的另外一个情况,如果说有两个用户同时想修改表中的一行怎么办??

测试:

锁的特点:
自动管理
伴随整个事物


锁的种类:
1、DML锁
在对数据进行修改的时候就会产生DML锁,一个事务会产生两把锁,一个是行级别的TX锁,一个是表级别的表级共享锁

为什么要有TX和TM的存在呢?
select sid,TYPE,ID1,ID2,LMODE,REQUEST,CTIME from v$lock; --发起dml,使用语句查询

TX(行级别)
保护事务中某一行的一致性
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Knuuy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值