收藏 分享(赏)

oracle主键和外键.doc

上传人:11xg27ws 文档编号:12339639 上传时间:2021-12-11 格式:DOC 页数:4 大小:33.50KB
下载 相关 举报
oracle主键和外键.doc_第1页
第1页 / 共4页
oracle主键和外键.doc_第2页
第2页 / 共4页
oracle主键和外键.doc_第3页
第3页 / 共4页
oracle主键和外键.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、CREATE TABLE “SCOTT“.“MID_A_TAB“( “A“ VARCHAR2(20 BYTE),“B“ VARCHAR2(10 BYTE),“DETPNO“ VARCHAR2(10 BYTE)TABLESPACE “USERS“ ;CREATE TABLE “SCOTT“.“MID_B_TAB“( “A“ VARCHAR2(20 BYTE),“B“ VARCHAR2(10 BYTE),“DEPTNO“ VARCHAR2(10 BYTE)TABLESPACE “USERS“ ;-给 MID_A_TAB 表添加主键alter table mid_a_tab add constrai

2、nt a_pk primary key (detpno);-给 MID_B_TAB 表添加主键alter table mid_b_tab add constraint b_pk primary key(a);-给子表 MID_B_TAB 添加外键,并且引用主表 MID_A_TAB 的 DETPNO 列,并通过 on delete cascade 指定引用行为是级联删除alter table mid_b_tab add constraint b_fk foreign key (deptno) references mid_a_tab (detpno) on delete cascade;-向这样

3、就创建了好子表和主表向主表添加数据记录SQL insert into mid_a_tab(a,b,detpno) values('1','1','10');已创建 1 行。已用时间: 00: 00: 00.00向子表添加数据SQL insert into mid_b_tab(a,b,deptno) values('1','2','6');insert into mid_b_tab values('1','2','6')*第 1 行出现错误:ORA-00

4、001: 违反唯一约束条件 (SCOTT.B_PK)已用时间: 00: 00: 00.00可见上面的异常信息,那时因为子表插入的 deptno 的值是 6,然而此时我们主表中detpno 列只有一条记录那就是 10,所以当子表插入数据时,在父表中不能够找到该引用列的记录,所以出现异常。但我们可以这样对子表的数据的进行插入(即:在子表的 deptno 列插入null,因为我们在建表的时候并没有对该列进行 not null 的约束限制):SQL insert into mid_b_tab(a,b,deptno) values('3','2',null);已创建 1

5、行。已用时间: 00: 00: 00.00现在如果我们把子表 mid_b_tab 中 deptno 列加上 not null 约束。SQL alter table mid_b_tab modify deptno not null;alter table mid_b_tab modify deptno not null*第 1 行出现错误:ORA-02296: 无法启用 (SCOTT.) - 找到空值已用时间: 00: 00: 00.01上面又出现异常,这是因为现在 mid_b_tab 表中有了一条记录,就是我们先前添加的那条记录。3,2,null现在我们要把该表的 deptno 列进行 not

6、 null 约束限制,所以 oracle 不让我们这样干。那我们就只有把该表给 delete 或 truncate 掉,然后在修改 deptno 列为非空。SQL delete from mid_b_tab;已删除 2 行。已用时间: 00: 00: 00.01再次修改子表 mid_b_tab 表的 deptno 列为非空。SQL alter table mid_b_tab modify deptno not null;表已更改。已用时间: 00: 00: 00.01修改成功!我们再次插入数据insert into mid_b_tab(a,b,deptno) values('13

7、9;,'2',null);试试。SQL insert into mid_b_tab(a,b,deptno) values('13','2',null);insert into mid_b_tab(a,b,deptno) values('13','2',null)*第 1 行出现错误:ORA-01400: 无法将 NULL 插入 (“SCOTT“.“MID_B_TAB“.“DEPTNO“)已用时间: 00: 00: 00.00看见现在 oracle 不让我们插入空值了。所以我们在创建子表的外键约束时,该表的引用列必须

8、要进行 not null 限制,也可以在该列创建 unique,或 primary key 约束,并且引用列与被引用列的数据类型必须相同。SQL insert into mid_b_tab(a,b,deptno) values('13','2','10');已创建 1 行。已用时间: 00: 00: 00.01此时数据插入成功,因为此时插入的 10,在主表中的被引用列中已经存在了。现在我们一系列的操作:SQL select * from mid_b_tab ;A B DE- - -13 2 10已用时间: 00: 00: 00.00SQL select * from mid_a_tab;A B DE- - -1 1 10已用时间: 00: 00: 00.00SQL delete from mid_a_tab;已删除 1 行。已用时间: 00: 00: 00.01

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报