insert的阻塞确实不常见,今天碰到了一个,看书又了解一个,整理下。
1、多个会话同时向unique字段插入相同的值
session1:
首先建测试表test,并在字段id上创建一个主键索引(唯一键也可以)。
SQL> create table test(id number,name char(1));
Table created.
SQL> insert into test values(1,'a');
1 row created.
SQL> rollback;
Rollback complete.
SQL> alter table test add constraint pk_test_id primary key(id);
Table altered.
SQL> insert into test values(1,'a');
1 row created.
SQL>
session2:
SQL> insert into test values(1,'b');
session2的insert被阻塞。
如果应用确实需要生成主键或唯一键,可以采用序列生成。
2、主外键关系的表可能会相互阻塞
将1中创建的test表作为父表,再创建一个子表,如test_sun。
session1:
SQL> create table test_sun(id number,name char(1));
Table created.
SQL> alter ta