子表,父表的定义: 拥有外键的表是子表。主键被其它
表引用的表是父表。
换句话说:因为父表的标识被很多个子表中的记录引用,所以叫父表。
拥有外键关系,并且可以随便删除数据,不影响其它表的数据的那个表叫子表。
使用的时候谁做为谁的外键,主要从以下两点考虑:
1/,删除是如何相互影响的,删除记录受约束的那个是父表,不受约束的那个是子表;
2/,记录必须先存在的是父表;
图
3-4
外键
关于外键、关系以
两种用途:
1/, 最常用的一种: 减少重复数据.表A中拥有外键,表B的数据基本是不允许删除的.这时选择对 INSERT 和 UPDATE 强制关系
即可.
2/,其次,是增加一个从属表. 如果表A删除一条记录时,表B中也随着删除一条相关联的记录,那么外键关系中,表A的主键是表B的外键。这种关系,实际上表B是表A的从属表(即表A是父表),选择对 INSERT 和 UPDATE 强制关系
时,如果向表B中插入数据,表A中必须已经存在对应的记录。选择级联删除相关的字段
时,删除表A中的一条记录,就会删除对应的表B中的一条记录。
参考资料:
1,SQl2000 中 ,设计表>管理关系中 关于外键的5个选项都起什么作用?
创建中检查现存数据
创建关系时将关系应用于外键表中的现有数据。如果选定该对话框,一个错误信息将会通知您有违反约束的数据。
对 INSERT 和 UPDATE 强制关系
如果选择该选项,则只要使用这些语句在外键表中添加或更新数据时都将强制约束。
对复制强制关系
如果选择该选项,则无论何时将外键表复制到一个不同的数据库
,都将强制关系的引用完整性。
级联更新相关的字段
无论何时更新主键值,都指示数据库将新的键值传播到相应的外键字段。
级联删除相关的字段
无论何时删除主表中的行,都指示数据库从外键表中删除相应的行。
2,CASCADE 有 什么作用?
ON DELETE {CASCADE | NO ACTION}
指定当表中被更改的行具有引用关系,并且该行所引用的行从父表中删除时,要对被更改行采取的操作。默认设置为 NO ACTION。
如果指定 CASCADE,则从父表中删除被引用行时,也将从引用表中删除引用行。如果指定 NO ACTION,SQL Server 将产生一个错误并回滚父表中的行删除操作。
如果表中已存在 ON DELETE 的 INSTEAD OF 触发器,那么就不能定义 ON DELETE 的CASCADE 操作。
例如,在 Northwind 数据库中,Orders 表和 Customers 表之间有引用关系。Orders.CustomerID 外键引用 Customers.CustomerID 主键。
如
果对 Customers 表的某行执行 DELETE 语句,并且为 Orders.CustomerID 指定
ON DELETE CASCADE 操作,则 SQL Server 将在 Orders
表中检查是否有与被删除的行相关的一行或多行。如果存在相关行,那么 Orders 表中的相关行将随 Customers
表中的被引用行一同删除。
反之,如果指定 NO ACTION,若在 Orders 表中至少有一行引用 Customers 表中要删除的行,则 SQL Server 将产生一个错误并回滚 Customers 表中的删除操作。
ON UPDATE {CASCADE | NO ACTION}
指定当表中被更改的行具有引用关系,并且该行所引用的行在父表中更新时,要对被更改行采取的操作。默认设置为 NO ACTION。
如果指定 CASCADE,则在父表中更新被引用行时,也将在引用表中更新引用行。如果指定 NO ACTION,SQL Server 将产生一个错误并回滚父表中的行更新操作。
如果表中已存在 ON DELETE 的 INSTEAD OF 触发器,那么就不能定义 ON DELETE 的CASCADE 操作。
例如,在 Northwind 数据库中,Orders 表和 Customers 表之间有引用关系。Orders.CustomerID 外键引用 Customers.CustomerID 主键。
如
果对 Customers 表的某行执行 UPDATE 语句,并且为 Orders.CustomerID 指定
ON UPDATE CASCADE 操作,则 SQL Server 将在 Orders
表中检查是否有与被更新行相关的一行或多行。如果存在相关行,那么 Orders 表中的相关行将随 Customers
表中的被引用行一同更新。
反之,如果指定了 NO ACTION,若在 Orders 表中至少存在一行引用 Customers 表中要更新的行,那么 SQL Server 将引发一个错误并回滚 Customers 表中的更新操作。
3,一个SQL创建外键的例子:
/*建库,名为student_info*/
create database student_info
/*使用student_info*/
use student_info
go
/*建student表,其中s_id为主键*/
create table student
(
s_id int identity(1,1) primary key,
s_name varchar(20) not null,
s_age int
)
go
/*建test
表,其中test_no为主键*/
create table test
(
test_no int identity(1,1) primary key,
test_name varchar(30),
nax_marks int not null default(0),
min_marks int not null default(0)
)
go
/*建marks表,其中s_id和test_no为外建,分别映射student表中的s_id和test表中的test_no*/
create table marks
(
s_id int not null,
test_no int not null,
marks int not null default(0),
primary key(s_id,test_no),
foreign key(s_id) references student(s_id),
foreign key(test_no) references test(test_no)
)
go
分享到:
相关推荐
针对于初学者sqlserver外键的建立,详细的介绍了建立外键的几种方法。
sql外键约束解释,foreign tag
获得Microsoft SQL server外键集合,方便开发人员查看所有的外键,简化查询
SQL2008设置外键
MySQL 外键
Access中如何建立外键关系,首先建立Course表,Student表,和SC表,建立和删除数据表关系。
Java~主外键关系~有图解~主外键关系~主外键关系
sqlserver 2005 主外键-复合主键案例
SQL语句大全_主外键_约束完全自学手册
关系模型Relational_Model,主键Primary_Key,外键Foreign_Key【关系数据库SQL教程2】
SQLServer生成所有外键存储过程,需要一次性将所有varchar改为Nvarchar,有些表具有外键限制不能用代码改。用这个过程,不用再每个表都检查了,不然天量的字段,改到什么时候哦。
sql学习 主外键设计其他_约束关系.sql
T_SQL建库建表加约束(主键,外键,检查,唯一等约束,插入数据) T_SQL建库建表加约束(主键,外键,检查,唯一等约束,插入数据)
SQL数据完整性 主键_外键_unique_check_primary
主外键 sql server
sql学习 主外键设计其他_外键注意点.sql
sql学习 主外键设计2_外键索引与锁.sql
sql学习 主外键设计1_外键索引与性能.sql
一、SQL语句创建数据表并设置主外键关系 create table demo.ChineseCharInfo ( ID int not null auto_increment, Hanzi varchar(10) not null, primary key (ID) ) engine=innodb auto_increment=
设置外键.sql