oracle表没被锁删不掉,oracle-锁定从父表删除而不是错误

在Oracle 11g中,作者创建了两个表t1和t2,t2引用了t1的外键。当尝试在会话1中更新t2表并在未提交状态下执行删除t1的操作时,会话2尝试删除t1时出现锁。这是因为外键约束导致的事务隔离级别问题,未提交的更新阻止了删除操作,引发了锁定。错误信息提示违反了外键完整性约束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有Oracle数据库11g企业版11.2.0.1.0版.

我有父表t1和t2,并带有引用t1(col1)的外键.

我想知道的是为什么有锁?

请检查我做了什么…

第一场

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.

第二场

SQL> delete from t1; -- Lock happens here!!!

第一场

SQL> commit;

Commit complete.

第二场

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

谁能解释我为什么会这样?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值