折叠 编辑本段 基本介绍
折叠 编辑本段 使用实例
例如:
板足老所动肥台student(北星文s#,sname,d#),即盐早学生这个关系有三个属性:学号,姓名,所在系别。
dep(d#,dname),即院系有两诗她发伤溶个属性:系号、系名。
则s#、d#是主键,也是各自所在关系的唯一候选键,d#是student的外键。
建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键)。
指定外键关抗升美章风技仍光身键字: foreign key(列名)
引用外键关键字: refere低影判蛋nces <外键表名>(外键列款名)
事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no acti更马找步化on
例如:
outT黄复菜析话able表 主键 id 类型 int
创建含有外键的表:
create table temp(
id int,
name char(20),
foreign key(id) references outTable(id) on dele房te cascade on upda成任谁欢te cascade);
说明:把id列 设为外键 参照外表outTable的id列 当外键的值删除 本表世跳鱼秋中对应的列筛除 当外键的值卫投检件服菜下告改变 本表中对应的列值改变。
折叠 编辑本段 几个原则
1、 为关联字段创建外键。
2、 所有的键都必须唯一。
3、避免使用复合键。
4、外键总是关联唯一的键字段。
折叠 编辑本段 相关信息
折叠 主键表和外建表
使用设计界面创建外键时,出现主键表和外建表问题,上述使个人理解有误:
CREATE TABLE TABLE1
(
[ID] INT IDENTITY(1,1) PRIMARY KEY
)
GO
CREATE TABLE TABLE2
(
[ID] INT NOT NU为族感随LL,
FOREIGN KEY ([ID]) REFERENCES [TA缺自拿温者斯突施宜劳木BLE1]([ID])
)
GO
TABLE2 中引用了TABLE1,在此TABLE1为主键表,而TABLE2 为外键表。
总结:主键表是被引用的表,外键表是引用其他表的表。
折叠 外键的有效性
有很乐弦哥图歌剂既卷别面多时候,程序员会发现字段缺少、多余问题或者是创建外键以后就不能添加没有受约束的行[特殊情况下是有必要的],这个时候不想对表结构进行操作,就可以使用约束失效。
以 Northwind 为例:想给产品表【Products表】添加一条不受种类表【Categori阳带可环条担es表】限制的数据。可以使产品表中的 Categories 约束失效。
写法:ALTER TABLE dbo.Products NOCHECK CONSTRAINT FK_Products_Categories
添加完成后再使其有效:
ALTER TABLE dbo.Products CHECK CONSTRAINT FK_Products_Categories
这样就完成不受某表约束的数据添加了。
还有一个好处是:如上述例子。修改 Categories 表时 添加字段时 要把所有引用 Categories 表的外键给失效。等给 Categories 表添加字段完成后再使所有应用 Categories 表的外键恢复有效性即可。