现有
员工关系(员工编号,姓名,性别,部门编号)==》 主码是员工编号,部门编号为员工关系的外码
部门关系(部门编号,部门名称)==》 部门编号是主码
现有以下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