oracle主键和外键_第1页
oracle主键和外键_第2页
oracle主键和外键_第3页
oracle主键和外键_第4页
oracle主键和外键_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、CREATE TABLE SCOTT.MID_A_TAB( A VARCHAR2(20 BYTE,B VARCHAR2(10 BYTE,DETPNO VARCHAR2(10 BYTETABLESPACE USERS ;CREATE TABLE SCOTT.MID_B_TAB( A VARCHAR2(20 BYTE,B VARCHAR2(10 BYTE,DEPTNO VARCHAR2(10 BYTETABLESPACE USERS ;-给 MID_A_TAB表添加主键alter table mid_a_tab add constraint a_pk primary key (detpno; -给

2、 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;-向这样就创建了好子表和主表向主表添加数据记录SQL insert into

3、 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-00001: 违反唯一约束条件 (SCOTT.B_PK已用时间 : 00: 00: 00.00可见上面的异常信息,那时因为子表插入的 deptno 的值是 6,然而此时我 们主表中detpno 列只有一条记录那就是 10,所以当子表插入数据时,在父表中不能

4、 够找到该引用列的记录,所以出现异常。但我们可以这样对子表的数据的进行插入 (即:在子表的 deptno 列插入 null, 因为我们在建表的时候并没有对该列进行 not null的约束限制 :SQL insert into mid_b_tab(a,b,deptno values(3,2,null; 已创建 1 行。已用时间 : 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

5、deptno not null*第 1 行出现错误 :ORA-02296: 无法启用 (SCOTT. - 找到空值已用时间 : 00: 00: 00.01上面又出现异常, 这是因为现在 mid_b_tab表中有了一条记录, 就是我们先 前添加的那条记录。3, 2, null现在我们要把该表的 deptno 列进行 not null约束限制,所以 oracle 不让 我们这样干。那我们就只有把该表给 delete 或 truncate 掉,然后在修改 deptno 列为非 空。SQL delete from mid_b_tab;已删除 2行。已用时间 : 00: 00: 00.01再次修改子表

6、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,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

7、 插入 (SCOTT.MID_B_TAB.DEPTNO已用时间 : 00: 00: 00.00看见现在 oracle 不让我们插入空值了。所以我们在创建子表的外键约束时,该表的引用列必须要进行 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 se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论