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子句的表定义。
- FOREIGN KEY 在ORACLE中的使用
- Oracle Foreign key
- ORACLE foreign key
- (mysql)Foreign key的使用
- EF中的Foreign-key的删除关系
- 数据库中的参照完整性(Foreign Key)
- foreign key
- foreign key
- MYSQL外键(Foreign Key)的使用
- MYSQL外键(Foreign Key)的使用
- (mysql)Foreign key的使用 InnoDB
- MYSQL外键(Foreign Key)的使用
- MYSQL外键(Foreign Key)的使用
- MYSQL外键(Foreign Key)的使用
- MYSQL外键(Foreign Key)的使用
- MYSQL外键(Foreign Key)的使用
- MYSQL外键(Foreign Key)的使用
- MYSQL外键(Foreign Key)的使用
- pthread_cond_signal
- photoshop怎样给黑白照片上色
- 胖子的纠结
- git 使用
- 64位系统代码移植面临的20个问题(一)
- FOREIGN KEY 在ORACLE中的使用
- NAND FLASH学习笔记之nand flash基础(三)
- 放弃与坚持
- IOC(DI)框架的生动讲解
- Ubuntu系统安装谷歌拼音
- 浙大月赛 ZOJ Monthly, March 2014(简单题的题解)
- CLOSE_WAIT状态的原因与解决方法
- 一个简单的linux线程池
- 基于Jquery的动态创建DOM元素的代码