子表,父表的定义: 拥有外键的表是子表。主键被其它表引用的表是父表。
换句话说:因为父表的标识被很多个子表中的记录引用,所以叫父表。
拥有外键关系,并且可以随便删除数据,不影响其它表的数据的那个表叫子表。
使用的时候谁做为谁的外键,主要从以下两点考虑:
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
备注:原文出处 http://hi.baidu.com/zhanglin34/blog/item/120a47432df7d71b72f05d00.html
分享到:
相关推荐
### 获取SQL外键集合知识点详解 #### 一、概述 在数据库设计中,外键(Foreign Key)是一种用于建立表间关系的重要机制。通过定义一个表中的列与另一个表中的主键之间的链接,可以实现数据的一致性和完整性。在...
在SQL(结构化查询语言)中,外键约束是一种重要的关系数据库完整性机制,它用于确保数据的一致性和准确性。外键约束是两个表之间的一种关联,一个表中的外键引用了另一个表的主键,从而建立了两个表之间的联系。...
在SQL数据库设计中,外键(Foreign Key)是实现数据完整性和引用完整性的关键机制,它使得不同表之间的数据能够建立关联,确保了数据的一致性。本文将深入讲解如何在SQL Server中建立外键,以及如何使用不同的方法...
本主题将深入探讨如何利用T-SQL进行数据库构建、表设计以及应用不同类型的约束,包括主键、外键、检查约束和唯一性约束,并演示数据的插入方法。 1. **创建数据库**: 在T-SQL中,使用`CREATE DATABASE`语句来创建...
MySQL 外键
SQL2008设置外键
7、动态创建SQL外键约束。 8、动态创建SQL触发器。 9、自定义SQL数据库登录校验窗体。 10、不用设置BDE的SQL数据库连接。 11、动态窗体创建。 12、MDI编程。 13、利用Field的OnSetText事件检查输入值是否存在...
在SQL Server数据库管理系统中,外键是用于维护数据完整性和引用完整性的关键元素。它们确保一个表中的数据(主键)与另一个表中的数据(外键)之间存在正确的关联。在进行数据库设计时,合理使用外键能确保数据的...
SQL(Structured Query Language)是用于管理和操作关系数据库的标准化语言,它包括数据查询、数据更新、数据插入和数据删除等多种功能。在本篇文章中,我们将深入探讨SQL中的一个重要概念——约束(Constraint),...
SQL语句提供了多种方式来为表添加外键,以下将详细介绍标题和描述中提到的四种方法。 1. **创建表的同时添加外键** 当创建新表时,可以在CREATE TABLE语句中直接定义外键。例如: ```sql CREATE TABLE score ( ...
在SQL Server 2005中,主键与外键是数据库设计中非常重要的概念,它们主要用于确保数据的完整性和一致性。特别是在复杂的数据关系管理中,复合主键的应用更是能够帮助我们有效地处理多对多的关系或者是更为复杂的...
SQL数据完整性 主键_外键_unique_check_primary
sql学习 主外键设计其他_外键注意点.sql
sql学习 主外键设计2_外键索引与锁.sql
sql学习 主外键设计1_外键索引与性能.sql
**题目描述**:在SQL Server 2005中,外键用于将一个表中的列与另一表中的列关联起来,为了确保引用的完整性,需要满足的要求是? **解析**: - **选项分析**: - 选项A: 外键列的列值必须已经存在于主键表的对应...
本文详细介绍了在MySQL中增加外键的方法,并提供了使用PHPMyAdmin管理工具和SQL语句来实现外键添加的操作步骤和注意事项。 首先,要成功地在MySQL中增加一个外键,需要满足几个前提条件: 1. 本表的列必须与外键...
主外键 sql server
关系型数据库与非关系型数据库 sql外键添加与删除带来的影响 如果不添加外键会发生是什么问题
用于查询某个数据库下所有表的外键约束情况,以便统一分析外键约束是否合理;主要查询出外键的,是否级联删除,级联更新,强制外键约束,强制复制约束始终状态。如想使用别的状态,请自行添加。下载的童鞋别下载错了...