Oracle Database 11g Enterprise Edition リリース 11.2.0.1.0 を使用しています。t1(col1)を参照する外部キーを持つ親テーブルt1とt2があります。私が疑問に思っているのは、なぜロックがあるのですか?私がしたことを確認してください...
セッション1
SQL> create table t1(col1 char(1), primary key(col1));
Table created.
SQL> insert into t1 values('1');
1 row created.
SQL> insert into t1 values('2');
1 row created.
SQL> insert into t1 values('3');
1 row created.
SQL> insert into t1 values('4');
1 row created.
SQL> insert into t1 values('5');
1 row created.
SQL> commit;
Commit complete.
SQL> create table t2(col1 char(1), col2 char(2), foreign key(col1) references t1(col1));
Table created.
SQL> insert into t2 values('1','0');
1 row created.
SQL> commit;
Commit complete.
SQL> update t2 set col2='9'; --not committed yet!
1 row updated.
セッション 2
SQL> delete from t1; -- Lock happens here!!!
セッション1
SQL> commit;
Commit complete.
セッション 2
delete from t1 -- The error occurs after I commit updating query in session 1.
*
ERROR at line 1:
ORA-02292: integrity constraint (KMS_USER.SYS_C0013643) violated - child record found
なぜこれが起こるのか誰か説明してもらえますか?