子表上的insert 操作執(zhí)行后不提交,會阻塞后續(xù)主表上的update、delete、insert操作(針對包含主鍵列的的操作),主表、
在浠水等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷,外貿(mào)網(wǎng)站建設(shè),浠水網(wǎng)站建設(shè)費用合理。
子表都是TM鎖,外鍵加索引后消除阻塞問題。
create table test_pk1 (id number,pcol varchar2(1)) tablespace users;
alter table test_pk1 add constraint pk_test_pk1_id primary key(id) using index tablespace users;
insert into test_pk1 values(1,'A');
insert into test_pk1 values(2,'B');
insert into test_pk1 values(3,'C');
insert into test_pk1 values(4,'D');
insert into test_pk1 values(5,'E');
commit;
create table test_fk1 (id number,fcol varchar2(1)) tablespace users;
alter table test_fk1 add constraint fk_test_fk1_id foreign key(id) references test_pk1(id);
insert into test_fk1 values(1,'a');
insert into test_fk1 values(2,'a');
commit;
場景一:子表執(zhí)行insert操作后不提交,另一個事務(wù)對主表進行update、delete、insert
--子表
insert into test_fk1 values(5,'d');
--主表
update test_pk1 set id=55 where id='4';
delete test_pk1 where id='3';
insert into test_pk1 values(6,'F');
結(jié)論:子表上的insert 操作執(zhí)行后不提交,會阻塞后續(xù)主表上的update、delete、insert操作(針對包含主鍵列的的操作),
主表、子表都是TM鎖。
--給外鍵加索引后,然后進行主表的update、delete、insert操作看是否會有影響
create index idx_id on test_fk1(id);
結(jié)論:外鍵加索引后消除阻塞問題。
場景二:子表執(zhí)行update操作后不提交,另一個事務(wù)對主表進行update、delete、insert
--子表
update test_fk1 set fcol='b' where id='2';
--主表
update test_pk1 set id=55 where id='4';
delete test_pk1 where id='3';
insert into test_pk1 values(6,'F');
結(jié)論:子表上的update操作執(zhí)行后不提交,對主表上的update、delete、insert操作無影響。
場景三:子表執(zhí)行delete操作后不提交,另一個事務(wù)對主表進行update、delete、insert
--子表
delete test_fk1 where id='2';
--主表
update test_pk1 set id=55 where id='4';
delete test_pk1 where id='3';
insert into test_pk1 values(6,'F');
結(jié)論:子表上的delete操作執(zhí)行后不提交,對主表上的update、delete、insert操作無影響。
場景四:主執(zhí)行delete操作后不提交,另一個事務(wù)對子表進行update、delete、insert
--主表
delete test_pk1 where id='3';
--子表
update test_fk1 set fcol='A' where id='1';
insert into test_fk1 values(4,'d');
delete test_fk1 where id='2';
結(jié)論:主表上的delete操作執(zhí)行后不提交,對子表上的update、delete、insert操作無影響。
場景五:主執(zhí)行update操作后不提交,另一個事務(wù)對子表進行update、delete、insert
--主表
update test_pk1 set pcol='F' where id='5';
--子表
update test_fk1 set fcol='A' where id='1';
insert into test_fk1 values(4,'d');
delete test_fk1 where id='2';
結(jié)論:主表上的update操作執(zhí)行后不提交,對子表上的update、delete、insert操作無影響。
場景五:主執(zhí)行insert操作后不提交,另一個事務(wù)對子表進行update、delete、insert
--主表
insert into test_pk1 values(6,'F');
--子表
update test_fk1 set fcol='A' where id='1';
insert into test_fk1 values(4,'d');
delete test_fk1 where id='2';
結(jié)論:主表上的delete操作執(zhí)行后不提交,對子表上的update、delete、insert操作無影響。