创建表:
create table p(x int primary key);
create table c(x references p);
insert into p values(1);
insert into p values(2);
commit;
create table c(x references p);
insert into p values(1);
insert into p values(2);
commit;
然后在一个session里执行:
insert into c values(2);
再在另外一个session里执行:
delete from p where x = 1;
则此时,这第二个session会被阻塞。
原因是表c没有建索引,一旦创建了索引,再次执行如上操作时该阻塞就会被解除:
create index idx_c_x on c(x) nologging;
但是为何c上建立了索引就不会阻塞p的delete操作了?是什么原理?