7、外键约束

学习目标:

1、掌握外键约束的意义

2、掌握建立外键约束的语法

学习过程:

一、外键约束

Foreign key 约束用于定义主从表之间的关系,外部键约束要定义在从表上, 但主表必须具有主键约束或唯一约束. 当定义了外部键约束之后,要求外部键列的数据必须在主表的主键列(或唯一键)中存在, 或者为Null。

在数据库中表与表之间不是独立的,它们是有关系的。这在我们显示生活中的例子也有很多,学生表和班级表之间的关系是,每一个学生必然属于一个班级,也就是说必须先有班级,然后才能添加学生。还比如部门表和职位表,每一个职位也必然属于某个部门等等。

下面我们建立一个部门表和一个职位表,因为职位表的数据必须参考部门表,所以我们把职位表称为从表,部门表称为主表。示例:

1、定义部门表和职位表

 --部门表
create table department 
(
   dep_id int primary key,
   dep_name varchar2(100) not null
)


--职位表
create table post
(
   post_id int primary key,
   post_name varchar2(100),
   --所属部门
   dep_id int ,
)

2、定义外键约束,FOREIGN KEY:定义在表约束级的子表的列,REFERENCES:鉴别在父表中的表和列  

alter table post drop constraint  FK_dep_id 
--外键约束  -- constraint 约束名  foreign key(外键) references 主表(主键)
alter table post add constraint  FK_dep_id  foreign key(dep_id) references department(dep_id)

3、先为部门表添加三条数据

insert into department(dep_id,dep_name) values(1,'IT部门');
insert into department(dep_id,dep_name) values(2,'行政部门');
insert into department(dep_id,dep_name) values(3,'扫地部门');

4、尝试为职位表添加数据,这时候职位表的外键值必须是部门表已经存在的。

 --添加成功
insert into post(post_id,post_name,dep_id) values(1,'DBA',1)   
insert into post(post_id,post_name,dep_id) values(2,'java程序员',3);
insert into post(post_id,post_name,dep_id) values(3,'项目经理',3);


--添加失败
insert into post(post_id,post_name,dep_id) values(3,'项目组长',4);

二、CASCADE级联特性

CASCADE是级联操作,一般只主表发生变化是,从表应该做如何变化。

ON DELETE CASCADE:当父表中的行被删除的时候,同时删除在子表中依靠的行。

nON DELETE SET NULL:将依靠的外键值转换为空值

示例:

--先删除原来的约束
alter table post drop constraint  FK_dep_id 

--重新定义外键约束
alter table post add constraint  FK_dep_id  foreign key(dep_id) references department(dep_id) 
   on delete set null

尝试把主表的主键为3的语句删除,这时候从表的外键为3的值就会修改为null值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值