如何解决无法在ORACLE SQL中启用外键
所以我有一个禁用的外键(表Employees中的Manager_ID),我想启用它,但出现此错误:
ORA-02298:无法验证(my_username.EMP_MANAGER_FK)-找不到父密钥
这是代码:
ALTER TABLE Employees ENABLE CONSTRAINT EMP_MANAGER_FK;
这是创建表的方式:
CREATE TABLE "EMPLOYEES"
( "EMPLOYEE_ID" NUMBER(6,0),"FirsT_NAME" VARCHAR2(20),"LAST_NAME" VARCHAR2(25) CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE,"EMAIL" VARCHAR2(25) CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE,"PHONE_NUMBER" VARCHAR2(20),"HIRE_DATE" DATE CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL ENABLE,"JOB_ID" VARCHAR2(10) CONSTRAINT "EMP_JOB_NN" NOT NULL ENABLE,"SALARY" NUMBER(8,2),"COMMISSION_PCT" NUMBER(2,"MANAGER_ID" NUMBER(6,"DEPARTMENT_ID" NUMBER(4,"BONUS" VARCHAR2(5),CONSTRAINT "EMP_SALARY_MIN" CHECK (salary > 0) ENABLE,CONSTRAINT "EMP_ID_PK" PRIMARY KEY ("EMPLOYEE_ID")
USING INDEX ENABLE,CONSTRAINT "EMP_EMAIL_UK" UNIQUE ("EMAIL")
USING INDEX ENABLE
)
/
ALTER TABLE "EMPLOYEES" ADD CONSTRAINT "EMP_DEPT_FK" FOREIGN KEY
("DEPARTMENT_ID")
REFERENCES "DEPARTMENTS" ("DEPARTMENT_ID") ENABLE
/
ALTER TABLE "EMPLOYEES" ADD CONSTRAINT "EMP_JOB_FK" FOREIGN KEY ("JOB_ID")
REFERENCES "JOBS" ("JOB_ID") ENABLE
/
ALTER TABLE "EMPLOYEES" ADD CONSTRAINT "EMP_MANAGER_FK" FOREIGN KEY ("MANAGER_ID")
REFERENCES "EMPLOYEES" ("EMPLOYEE_ID") disABLE
/
CREATE INDEX "EMP_DEPARTMENT_IX" ON "EMPLOYEES" ("DEPARTMENT_ID")
/
CREATE INDEX "EMP_JOB_IX" ON "EMPLOYEES" ("JOB_ID")
/
CREATE INDEX "EMP_MANAGER_IX" ON "EMPLOYEES" ("MANAGER_ID")
/
CREATE INDEX "EMP_NAME_IX" ON "EMPLOYEES" ("LAST_NAME","FirsT_NAME")
/
解决方法
从外键的角度来看,列中的值无效。
假设您具有一个自引用外键,例如:
create table employees (
employee_id int primary key,manager_id int references employees(employee_id)
);
然后,错误消息表明manager_id
列中不存在employee_id
个。您可以使用以下查询来显示有问题的行:
select manager_id
from employees e
where not exists (select 1 from employees e1 where e1.employee_id = e.manager_id)
您需要先解决此问题,然后才能启用外键。
,如果您想以任何方式插入数据,则可以禁用约束EMP_MANAGER_FK并使用 NOVALIDATE 关键字启用它。
ALTER TABLE EMPLOYEES MODIFY CONSTRAINT EMP_MANAGER_FK ENABLE NOVALIDATE;
ENABLE NOVALIDATE意味着检查了约束是否有新行或修改过的行,但是现有数据可能违反了该约束。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。