外键约束

发表时间:2017-05-11 16:46:18 浏览量( 15 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、外键约束

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