我创建了两个表:
Create Table Dept
(Department_id number Constraint Depart_id_pk Primary Key
,Department_name varchar2(20));
Create table Emp
(Emp_id number Constraint Empl_id_pk Primary Key
,First_name varchar2(10)
,salary number
,Department_id number
,Constraint depart_id_fk Foreign Key (department_id)
References Dept (Department_id) on delete set null);
然后我在dept
和Emp
表中插入了一些记录。但当我尝试删除dept
表时,它没有在Emp.department_id
列中设置null,而是显示如下错误:
SQL> Drop Table Dept;
Drop Table Dept
*
ERROR at line 1:
ORA-02449: unique/primary keys in table referenced by foreign keys
外键的子句说"ondeleteset null"。Delete是一个DML操作,如果您试图从dept
表中删除行,则相应的emp
行将用null
dept_id
更新。
但事实并非如此——您试图删除整个表,这是一个DDL操作。这是不允许的,因为您将在emp
表上留下引用已不存在的表的约束。如果您也想删除这些约束,可以使用cascade constraints
子句:
DROP TABLE dept CASCADE CONSTRAINTS