当前位置: 首页 > wzjs >正文

国内包装设计网站贵州建设工程招标协会网站

国内包装设计网站,贵州建设工程招标协会网站,赣州网站优化制作,阿升网站免费学设计在数据模型中,当两个表存在"父子"关系时,即可以定义外键约束,这种关系限制一个表中的数据需要参考另一个表中已存在的数据,其中引用的表称为"子表",被引用的表称为"父表",引…

在数据模型中,当两个表存在"父子"关系时,即可以定义外键约束,这种关系限制一个表中的数据需要参考另一个表中已存在的数据,其中引用的表称为"子表",被引用的表称为"父表",引用关系通过在子表上创建外键约束来实现。

例如部门表和员工表,员工表中的"部门ID"必须在部门表中已存在,又或者班级表和学生表,学生表中的"班级ID"必须在班级表中已存在,即子表记录必须在父表中有对应的记录(或者为空)。

文章目录

  • 一、外键使用示例
    • 1.1 外键定义
    • 1.2 父表数据插入
    • 1.3 子表数据插入/更新/删除
    • 1.4 父表数据更新
    • 1.5 父表数据删除
    • 1.6 外键和索引
  • 二、自引用外键

一、外键使用示例

Oracle中的引用完成性是通过外键实现的,当2张表的数据存在"父子"关系时:

  • 外键定义在子表的某列上(如果是组合外键则是多列),外键会引用父表中的主键或唯一键。
  • 子表引用父表,子表外键可以插入的数据必须在父表被引用列中存在,即子表记录必须有对应的"父记录"。
  • 父表被子表引用,父表的更新删除不能导致子表的记录成为"孤儿"。

1.1 外键定义

外键通过constraint…references… 创建,可以在建表时指定,也可以在建表后通过alter table语句新增。

创建2张表parent、chlid,其中parent表中id为主键,child表中parent_id上定义外键,外键的引用对象为parent表的主键:

create table parent(
id number primary key,
parent_name varchar2(16));create table child(
id number primary key,
child_name varchar2(16),
parent_id number constraint fk_parent_id references parent(id));

在这里插入图片描述 • constraint fk_parent_id refercences parent(id) 子句即是外键定义。
• constraint 是创建约束的关键字,fk_parent_id是约束名称(可自定义),references关键字表示引用完整性约束,parent(id)表示引用对象为parent表中的id列。

1.2 父表数据插入

父表的记录是被引用的对象,因此外键约束对于父表的插入是没有限制的,这里插入2条数据,id分别为1和2:

insert into parent values(1,'Parent_1');
insert into parent values(2,'Parent_2');
commit;

在这里插入图片描述

1.3 子表数据插入/更新/删除

子表的parent_id上定义了外键,其引用对象为parent表的id列,因此child表的插入/更新/删除都将受到外键约束限制,子表parent_id列的取值范围为:

  • parent表id表包含的值,这里是1或2。
  • 空值null

下面分别向child表的parent_id列插入1,null和3,观察效果:

insert into child values(1,'Child_1', 1);
insert into child values(2,'Child_2', null);
insert into child values(3,'Child_3', 3);
commit;

在这里插入图片描述
可以看到parent_id为1和null时插入成功,当为3时,提示违反完整性约束(因为3在parent表的id列不存在)。

数据插入后的效果如下图:
在这里插入图片描述
child表的更新限制和插入相同,只要保证parent_id列符合完整性约束即可,你可以更新指向parent表其他id值(例如2),或者设置为空都是可以的。

child表的删除对父表无影响,因此child表的删除不受完成性约束限制,可以随意删除记录。

1.4 父表数据更新

父表数据更新会受到引用完整性的限制,当父表的记录被子表引用时,更新不能导致子表的引用完整性失效。

例如:parent表中id为1的记录被child表引用,那么将id=1更新为id=3将导致child表中的记录称为"孤儿",因此会失败:

update parent set id=3 where id=1;

在这里插入图片描述

1.5 父表数据删除

父表数据删除也会受到引用完整性的限制,但如果父表数据删除违反引用完整性时,Oracle可以自动处理子表记录来保持引用完整性,处理的方式有2种:

  • on delete cascade,级联删除,当父表记录删除时,所有引用该父记录的子表记录也将级联删除。
  • on delete set null,级联置空,当父表记录删除时,所有引用该父记录的子表记录外键也将被置为空值(null)。

级联删除和级联置空都是外键本身的特性,只能二选一,下面的DDL将外键替换为级联删除:

alter table child drop constraint fk_parent_id;
alter table child add constraint fk_parent_id foreign key (parent_id) references parent(id) on delete cascade;

在这里插入图片描述

下面删除parent表中id=1的记录,可以看到child表中parent_id=1的记录也被删除了:

select * from child;
delete from parent where id=1;
select * from child;

在这里插入图片描述
on delete set null选项则会将子表中引用外键列设置为null,而不是将子记录删除,这个选项可以保留子表记录,后续可以更新指向其他的父记录,这里不再演示。

根据上面的案例演示可以看出,正常情况下,外键约束的数据插入和删除顺序为:

  • 插入:父表先插入数据,然后子表再插入数据,建立引用关系。
  • 删除:子表先删除数据,清除引用关系,然后父表再删除数据(顺序正好反过来)。如果定义了on delete cascade/set null,则可以直接删除父表数据,Oracle会自动清除引用关系。

1.6 外键和索引

由于外键定义的是引用关系,两表会频繁通过外键进行连接,且当主表记录出现变更时,需要同时查询子表记录检测是否符合引用完整性,因此建议在外键列上建立索引,提升连接效率:

create index idx_parent_id on child(parent_id);

在这里插入图片描述

二、自引用外键

虽然通常外键引用的都是其他表中的主键/唯一键,但其实外键也可以引用自己,下面示例是Oracle官方示例hr.employees表中的自引用外键(在同一张表中manager_id列引用employee_id列):

select employee_id, first_name, manager_id from hr.employees order by employee_id;

在这里插入图片描述

http://www.dtcms.com/wzjs/839840.html

相关文章:

  • 天眼查网站能进入各种网站的浏览器
  • 国内炫酷的网站设计wordpress 手机端分开
  • 外贸电商做俄罗斯市场网站品牌策划公司和品牌设计公司
  • 丹东市网站开发公司西安网络推广平台公司
  • 计算机网站建设专业热门吗辽宁智能网站建设推荐
  • 手机网站开发 pdf黑龙江建设网一体化平台
  • 邹城网站建设哪家好北京网站营销与推广
  • 企业网站在哪里建免费建网站软件下载手机
  • 网站登录后台地址觅图网
  • 上海公共招聘网网址seo推广主管
  • 建小公司网站做游戏模板下载网站有哪些
  • 爱用建站网站建设联系电话
  • 有哪些好的响应式网站有哪些深圳网站制作公司兴田德润官方网站
  • 电子政务 和网站建设总结那个公司建站好
  • 网站建设的目标客户白银网站seo
  • 一般网站系统并发量营业推广
  • 做国厂家的网站本地wordpress数据
  • 高仿卡西欧手表网站公司做网站的好处
  • 建立自己网站的好处代理网页版
  • 网站建设的会计核算沈阳市做网站电话
  • 西宁网站建设学校厦门seo小谢
  • 白云手机网站开发做公司网站需要什么资料
  • 自己用dw做网站要多久贵州做网站的公司有哪些
  • 网站备案 手印随便福州seo排名优化
  • 常用网站图标有名的软件开发公司有哪些
  • 网站短信接口怎么做网站建设管理实训报告
  • 门户网站有哪些类型seo站内优化站外优化
  • 梅陇做网站网站域名查询工具
  • 建设局工程网站个性化定制网站
  • 沭阳做网站深圳网站设计灵点网络口碑好