ORA-02292: 违反完整约束条件 (***.FK_****) - 已找到子记录
生活随笔
收集整理的這篇文章主要介紹了
ORA-02292: 违反完整约束条件 (***.FK_****) - 已找到子记录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
執行DELETE FROM dept WHERE deptno = dept_no;時報錯
第 1 行出現錯誤: ORA-02292: 違反完整約束條件 (SCOTT.FK_DEPTNO) - 已找到子記錄 ORA-06512: 在 "SCOTT.PTESTFOUND", line 5 ORA-06512: 在 line 3查詢約束具體狀況
select * from user_constraints ; #用SCOTT用戶執行,否則找不到| SCOTT | PK_DEPT | P | DEPT | ENABLED | NOT DEFERRABLE | IMMEDIATE | VALIDATED | USER NAME | ||||
| SCOTT | PK_EMP | P | EMP | ENABLED | NOT DEFERRABLE | IMMEDIATE | VALIDATED | USER NAME | ||||
| SCOTT | FK_DEPTNO | R | EMP | SCOTT | PK_DEPT | NO ACTION | ENABLED | NOT DEFERRABLE | IMMEDIATE | VALIDATED | USER NAME |
CONSTRAINT_TYPE:
P --primary key unique and not null,可以是多個column的聯合
R --forgien key parent table 中的primary key中的values必須包含child table中所有的values. share column的parent-child 關系
或者直接通過約束名稱查找,更加直觀顯示:
select a.constraint_name, a.table_name, b.constraint_name ,b.table_namefrom user_constraints a, user_constraints bwhere a.constraint_type = 'R' and b.constraint_type = 'P' and a.r_constraint_name = b.constraint_nameand a.constraint_name = 'FK_DEPTNO'| FK_DEPTNO | EMP | PK_DEPT | DEPT |
EMP表中有外鍵FK_DEPTNO中關聯的字段DEPTNO與表DEPT的主鍵PK_DEPT中關聯字段DEPTNO,
所以刪除EMP表某一行時需要先把表DEPT中對應的一行先刪除;或者刪除/禁用EMP表中外鍵FK_DEPTNO約束。
參考《oracle 添加、修改、刪除、約束-語法》
我直接執行禁用EMP表的外鍵關聯
SQL> alter table EMP disable constraint FK_DEPTNO;刪除語句執行成功。
總結
以上是生活随笔為你收集整理的ORA-02292: 违反完整约束条件 (***.FK_****) - 已找到子记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 账户系统的具体实现
- 下一篇: 新加坡汇丰个人账户分析