FOREIGN KEY 在ORACLE中的使用

来源:互联网 发布:multiply .t python 编辑:程序博客网 时间:2024/05/21 09:26

        定义:FOREIGN KEY约束表示为外键约束,它的作用就是让两个表通过外键建立关系。 在使用外键约束时,被引用的列应具有主键约束,或者应具有唯一性。

       1、 如果某列定义为外键FOREIGN KEY约束,则该列的取值只能为相关表中的引用列值或者NULL值。

       2、可以为i一个字段定义FOREIGN KEY约束,也可以为多个字段的组合定义FOREIGN KEY约束。因此,FOREIGN KEY约束既可以在列级别定义,也可以在表级别定义。

       3、定义了FOREIGN KEY约束的外键列,与被引用的主键列在同一个表中,则被称为“自引用”。

       4、对于同一个字段,可以同时定义FOREIGN KEY和NOT NULL约束。

我们再次创建一个小示例:

     

create table NUMBERS(  numberid NUMBER(20) not null PRIMARY KEY,   mynumber VARCHAR2(20) not null)

以上表为父表。

 

create table TEACHER(  teacherid   NUMBER(5) not null,  teachername VARCHAR2(20) not null,  teachernum  NUMBER(20) REFERENCES numbers(numberid),   teacherage  NUMBER(3))

以上为拥有外键表。

 

再次我们应该注意的是:外键列和被引用的列的列明可以不同,但是数据类型必须完全形同。

 

我们也可以为已经存在的列添加外键,语法如下:

 

ALTER TABLE teacher ADD CONSTRAINT num_fk FOREIGN KEY (teachernum) REFERENCES numbers(numberid)

 

删除已经存在的外键约束,语法如下:

 

ALTER TABLE teacher DROP CONSTRAINT num_fk


再次我们也必须了解外键维护数据库的5种方式:

 

       1,CASCADE: 从父表删除或更新且自动删除或更新子表中匹配的行。ON DELETE CASCADE和ON UPDATE CASCADE都可用。在两个表之间,你不应定义若干在父表或子表中的同一列采取动作的ON UPDATE CASCADE子句。

  2,SET NULL: 从父表删除或更新行,并设置子表中的外键列为NULL。如果外键列没有指定NOT NULL限定词,这就是唯一合法的。ON DELETE SET NULL和ON UPDATE SET NULL子句被支持。

  3,NO ACTION: 在ANSI SQL-92标准中,NO ACTION意味这不采取动作,就是如果有一个相关的外键值在被参考的表里,删除或更新主要键值的企图不被允许进行(Gruber, 掌握SQL, 2000:181)。 InnoDB拒绝对父表的删除或更新操作。

  4,RESTRICT: 拒绝对父表的删除或更新操作。NO ACTION和RESTRICT都一样,删除ON DELETE或ON UPDATE子句。(一些数据库系统有延期检查,并且NO ACTION是一个延期检查。在MySQL中,外键约束是被立即检查的,所以NO ACTION和RESTRICT是同样的)。

  5,SET DEFAULT: 这个动作被解析程序识别,但InnoDB拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT子句的表定义。

 


 

0 0
原创粉丝点击