oracle 更新主键 会锁全表,关于子表外键未键索引时,修改主表主键导致子表锁定问题疑问...

---------------------------------------------------------------------------------------------

实验环境:

---------------------------------------------------------------------------------------------

create table emp(emp_id number primary key,dept_id number);   --子表

create table dept (dept_id number primary key);               --主表

alter table emp add constraint emp_fk1 foreign key (dept_id) references dept(dept_id);

insert into dept values(10);

insert into dept values(20);

insert into dept values(30);

insert into emp values(1,10);

insert into emp values(2,20);

insert into emp values(3,30);

commit;

----------------------------------------------------------------------------------------------

session 1

--HR USER--

select distinct(sid) from v$mystat;    14

session 2

select distinct(sid) from v$mystat;    68

----------------------------------------------------------------------------------------------

测试一(子表外键未建索引)

session1

delete from emp where dept_id=10;   --with no commit

session2

delete from dept where dept_id=30;  --status hang

查看当前锁

select * from v$lock where sid in(14,68)and type in('TX','TM');

dd06a1abc3fb84da465ff4eff32374f6.gif

锁住.png (6.66 KB, 下载次数: 8)

2013-7-26 10:56 上传

分析:sid为 14的回话(session 1)同时对78052 78054 两张表加了LMODE=3的SX锁,block=1

说明阻碍了一个回话进程

session1做commit  锁定解除

session2提示ora-02292 违反外键约束条件

------------------------------------------------------------------------------------------

测试二(子表外键创建索引)

create index exp_fk1 on emp(dept_id);

delete from emp where dept_id=20;  --with no commit

delete from dept where dept_id=10;  --删除成功

dd06a1abc3fb84da465ff4eff32374f6.gif

未锁住.png (6.77 KB, 下载次数: 9)

2013-7-26 10:56 上传

____________________________________以上是我的实验内容___________________________________

按照实验结果来看,子表外键未建索引情况下确实引起的主表的锁定,但是为什么只是一个LMODE=3的锁呢?这个锁应该不会有这么大的能力

第二次实验,子表外键创建索引,这次主表操作正常,但是从截图来看仍然有LMODE=3的锁,所以我判定锁住主表的关键锁不是此锁

求解释??到底是那个锁?我认为更像是一个表级别独占锁,但是臣妾找不到啊!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值