Oracle DB约束概览(三)
ER TABLE_NAME COLUMN_NAM CONSTRAINT_NAME C SEARCH_CONDITION
---------- ------------------------------ ---------- ------------------------------ - --------------------
HR EMPLOYEES SALARY EMP_SALARY_MIN C salary > 0
HR EMPLOYEES EMAIL EMP_EMAIL_UK U
HR EMPLOYEES EMPLOYEE_ID EMP_EMP_ID_PK P
HR EMPLOYEES DEPARTMENT_ID EMP_DEPT_FK R
HR EMPLOYEES JOB_ID EMP_JOB_FK R
HR EMPLOYEES MANAGER_ID EMP_MANAGER_FK R
HR EMPLOYEES LAST_NAME EMP_LAST_NAME_NN C "LAST_NAME" IS NOT NULL
HR EMPLOYEES EMAIL EMP_EMAIL_NN C "EMAIL" IS NOT NULL
HR EMPLOYEES HIRE_DATE EMP_HIRE_DATE_NN C "HIRE_DATE" IS NOT NULL
HR EMPLOYEES JOB_ID EMP_JOB_NN C "JOB_ID" IS NOT NULL
10 rows selected.
违反约束条件
当对列设置了约束条件后,如果试图违反约束条件规则,则会返回一条错误。例如,如果尝试更新一条记录,但该记录中的值受完整性约束条件所约束,则会返回一条错误。示例中,因为父表DEPARTMENTS中不存在部门55,所以你会收到违例ORA-02291“parent key not found(未找到父关键字)”。
hr@TEST0924> update employees set department_id=55 where department_id=110;
update employees set department_id=55 where department_id=110
*
ERROR at line 1:
ORA-02291: integrity constraint (HR.EMP_DEPT_FK) violated - parent key not found
如果某行中包含用作其它表中的外键的主键,则不能删除该行。
hr@TEST0924> delete from departments where department_id=60;
delete from departments where department_id=60
*
ERROR at line 1:
ORA-02292: integrity constraint (HR.EMP_DEPT_FK) violated - child record found
如果试图删除一条记录,但该记录中的值受完整性约束条件所约束,则会返回一条错误。
示例中试图从DEPARTMENTS表中删除部门60,但此操作导致一个错误,因为该部门编号已用作EMPLOYEES表中的外键。如果试图删除具有子记录的父记录,则会收到违例ORA-02292“child record found(存在子记录)”。
由于部门210 中没有任何雇员,因此下面的语句有效:
hr@TEST0924> delete from departments where department_id=210;
1 row deleted.