数据库之外键学习
来源:互联网 发布:数据挖掘就业前景 编辑:程序博客网 时间:2024/04/25 19:24
首先什么是外键?
如果公共关键字(表中相同的属性)是一个关系中的主关键字(primary key),那么这个公共关键字被称为另一个关系的外键。
相关概念解析:
公共关键字:多个表中的相同的属性或属性组。
主关键字:即主键。
关系:即一张表。
主表与从表
表A中有a、b两个字段,a字段是主键。表B有a、c两个字段。a字段可以设置外键。此时,表A为主表,表B为从表。
外键的作用:
1、数据完整性的(数据库基础理论书中所说的“参照完整性”的数据库实现方式。)
2、保持数据一致性,
3、控制存储在外键表中的数据
简而言之:当你对一个表的数据进行操作时和他有关联的一个或更多表的数据能够同时发生改变,这就是外键的作用。
外键约束的主要目的是控制存储在外键表中的数据,但它还可以控制对主键表中数据的修改。例如,如果在 publishers表中删除一个出版商,而这个出版商的 ID 在 titles表中记录书的信息时使用了,则这两个表之间关联的完整性将被破坏,titles 表中该出版商的书籍因为与 publishers 表中的数据没有链接而变得孤立了。
外键约束防止这种情况的发生。如果主键表中数据的更改使之与外键表中数据的链接失效,则这种更改是不能实现的,从而确保了引用完整性。如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的外键约束值相关,则该操作不可实现。若要成功更改或删除外键约束的行,可以先在外键表中删除外键数据或更改外键数据,然后将外键链接到不同的主键数据上去。
例如:
a b两个表
a表中存有客户号,客户名称
b表中存有每个客户的订单
有了外键后,你只能在确信b表中没有客户x的订单后,才可以在a表中删除客户x,否则b表中的数据就变得孤立了,即完整性缺失。
建立外键的原则:
1、为关联字段创建外键。
2、所有的键都必须唯一。
3、避免使用复合键。
4、外键总是关联唯一的键字段。
如何建立外键:
一、使用T-SQL语句:
指定主键关键字:foreign key(列名)
引用外键关键字:references <外键表名>(外键列名)
事件触发限制: ondelete和on update ,可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action
例如:
outTable表主键 id类型 int
创建含有外键的表:
create table temp(
id int,
name char(20),
foreign key(id) references outTable(id) on delete cascade on updatecascade);
说明:把id列设为外键,参照外表outTable的id列,当外键的值删除,本表中对应的列删除(on delete的作用),当外键的值改变,本表中对应的列值改变(on update的作用)。
二、使用DBMS关系图建立外键:
1、建表(见图,设置主键。)
2、新建关系图
3、选择添加表:
4、建立外键,将要建立外键关系表中主键字段拖向外键字段。
5、点击确定即可完成外键的建立。
使用外键的注意事项:
1、使两张表形成关联,外键只能引用外表中的列的值。
2、外建表达的是参照完整性:这是数据固有的,与程序无关。因此,应该交给DBMS来做。
3、使用外建,简单直观,可以直接在数据模型中体现,无论是设计、维护等回有很大的好处,特别是对于分析现有的数据库的好处非常明显
4、相对于触发器或程序完成的这个工作(指参照完整性约束),外键更方便。
5、阻止非法数据。实际上,前台程序应该对这种提交失败做出处理。数据是企业的而非程序的,储程序要尽量与数据分离,反之亦然。
6、建立外键的前提:本表的列必须与外键类型相同(外键必须是外表主键)。
- 数据库之外键学习
- 数据库总结之外键再学习
- 数据库设计之外键的思考
- SQL学习笔记(4)之外键
- MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引
- MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引
- 【VB.NE机房重构】数据库设计之外键
- Oracle数据库表的操作之外键连接
- 胡侃学习计算机--理论之外
- 胡侃学习计算机--理论之外
- MySQL之外键约束
- MySQL之外键约束
- MySQL之外键约束
- MySQL之外键约束
- unity之外键
- MySQL之外键约束
- MySQL之外键约束
- MySQL之外键约束
- 虚拟机学习系列 - 2 - 垃圾收集概述
- 安装SQL2005出现未按.net framework2.0或已安装的软件已损坏
- 初学CDMI
- 小波变换与傅里叶变换的区别
- Tarjan算法
- 数据库之外键学习
- 怎么简单怎么来
- 用table画出日历。
- 手机游戏发展趋势分析和预测
- new iPad/iPad2/ipad 三代平板参数对比
- IE和Firefox下执行exe程序
- SQL多表删除
- hdu 3415
- Android文件存储