7、外键约束

学习目标:

1、掌握外键约束的意义

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

学习过程:

一、外键约束

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

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

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

1、定义部门表和职位表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

 --部门表

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:鉴别在父表中的表和列  

1

2

3

 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、先为部门表添加三条数据

1

2

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、尝试为职位表添加数据,这时候职位表的外键值必须是部门表已经存在的。

1

2

3

4

5

6

7

 --添加成功

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:将依靠的外键值转换为空值

示例:

1

2

3

4

5

--先删除原来的约束

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值。

猜你喜欢

转载自blog.csdn.net/liubao616311/article/details/83903358
今日推荐