外键就是表与表的关系,比如:一个表的一例引用另外一个表的一列。
外键使用例子:
以下生成的两个表,department表为父表,employee表为子表。表示子表中的depart_id引用了父表中的depart_id作为外键;试图在子表中插入不与父表的任何行相对应的行时将失败,同样的,删除也是如此。否则会出现SQL Error: ORA-02291: integrity constraint (OT.SYS_C0010646) violated - parent key not found等错误。
**子表中添加外键后要先填父表中数据去满足外键约束。
--department表+注释
create table department(
depart_id NUMBER ,
depart_name VARCHAR2(255) NOT NULL,
depart_lead VARCHAR2(255) NOT NULL,
CONSTRAINT pk_department PRIMARY KEY (depart_id)
);
comment on column department.depart_id is '部门编号(主键)';
comment on column department.depart_name is '部门名称';
comment on column department.depart_lead is '部门经理';
--employee表+注释
create table employee(
eno VARCHAR2(255) NOT NULL,
ename VARCHAR2(255) NOT NULL,
esex VARCHAR2(3) NOT NULL,
depart_id NUMBER NOT NULL,
CONSTRAINT employee PRIMARY KEY (eno),
FOREIGN KEY (depart_id) REFERENCES department(depart_id)
);
comment on column employee.eno is '员工编号(主键)';
comment on column employee.ename is '员工姓名';
comment on column employee.esex is '员工姓别';
comment on column employee.depart_id is '员工所属部门';
--department表
insert into department(depart_id,depart_name,depart_lead) values('001','总裁办','Judy');
insert into department(depart_id,depart_name,depart_lead) values('002','行政部','Lili');
insert into department(depart_id,depart_name,depart_lead) values('003','人事部','Ben');
insert into department(depart_id,depart_name,depart_lead) values('004','销售部','Ken');
--employee表(需进行父表即department表的数据插入,因为子表的部门编号为父表的外键)
insert into employee(eno,ename,esex,depart_id) values(01,'xiaoli','女','001');
--eno必须插入值,无法默认null;主键不能包括null值和空字符串;
select * from EMPLOYEE;
将外键约束添加到表中
如果要将外键约束添加到现有表中,请按如下所示使用ALTER TABLE
语句:
ALTER TABLE child_table
ADD CONSTRAINT fk_name
FOREIGN KEY (col1,col2) REFERENCES child_table (col1,col2);
SQL
删除外键约束
要删除外键约束,请使用下面的ALTER TABLE
语句:
ALTER TABLE child_table
DROP CONSTRAINT fk_name;
SQL
禁用外键约束
要暂时禁用外部约束,请使用以下ALTER TABLE
语句:
ALTER TABLE child_table
DISABLE CONSTRAINT fk_name;
SQL
启用外部约束
同样,也可以使用ALTER TABLE
语句启用禁用的外键约束:
ALTER TABLE child_table
ENABLE CONSTRAINT fk_name;