当前位置: 代码迷 >> Oracle管理 >> oracle里的参照完整性有有关问题吗
  详细解决方案

oracle里的参照完整性有有关问题吗

热度:28   发布时间:2016-04-24 05:26:24.0
oracle里的参照完整性有问题吗?
现有
  员工关系(员工编号,姓名,性别,部门编号)==》 主码是员工编号,部门编号为员工关系的外码
  部门关系(部门编号,部门名称)==》 部门编号是主码
   
现有以下SQL语句:
 insert into 员工 values('e005','kk','f',NULL)这条语句为什么会报错,难道参照完整性有问题?
 根据数据库原理:1.若一个关系R1中外码的取值要参照另一个关系R2中主码的取值,则称R1为参照关系,R2为被参照关系  
参照完整性规则:参照关系中每个元素的外码要么为空值,要么等于被参照关系中某个元组的主码。

------解决方案--------------------
SQL code
-- Create tablecreate table DEPT_TEST(  DEPTNO NUMBER(2) not null,  DNAME  VARCHAR2(14),  LOC    VARCHAR2(13));alter table DEPT_TEST  add constraint PK_DEPT_TEST primary key (DEPTNO);  -- Create tablecreate table EMP_TEST(  EMPNO    VARCHAR2(10),  ENAME    VARCHAR2(10),  SEX      VARCHAR2(9),  DEPTNO   NUMBER(2));alter table EMP_TEST  add constraint FK_DEPTNO_TEST foreign key (DEPTNO)  references DEPT_TEST (DEPTNO);SQL>  select * from dept_test; DEPTNO DNAME          LOC------ -------------- -------------SQL>   --插入deptno空的时候可以正常插入SQL>   insert into EMP_TEST values('e005','kk','f',NULL); 1 row insertedSQL>   COMMIT; Commit completeSQL>   SELECT * FROM EMP_TEST; EMPNO      ENAME      SEX       DEPTNO---------- ---------- --------- ------e005       kk         f         SQL>   insert into EMP_TEST values('e005','kk','f',10); insert into EMP_TEST values('e005','kk','f',10) ORA-02291: integrity constraint (SCOTT_TEST.FK_DEPTNO_TEST) violated - parent key not foundSQL>   COMMIT; Commit completeSQL>   SELECT * FROM EMP_TEST; EMPNO      ENAME      SEX       DEPTNO---------- ---------- --------- ------e005       kk         f
  相关解决方案