SQL高级语句-FOREIGN KEY 约束,确保同一个表或者不同表之间的引用完整性
2017-02-28 09:34
495 查看
FOREIGN KEY 约束
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。让我们通过一个例子来解释外键。请看下面两个表:
"Persons" 表:
Id_P | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
Id_O | OrderNo | Id_P |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
"Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY。
"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的动作。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
SQL FOREIGN KEY Constraint on CREATE TABLE
下面的 SQL 在 "Orders" 表创建时为 "Id_P" 列创建 FOREIGN KEY:MySQL:
CREATE TABLE Orders ( Id_O int NOT NULL, OrderNo int NOT NULL, Id_P int, PRIMARY KEY (Id_O), [code]FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)
[/code]
SQL Server / Oracle / MS Access:
CREATE TABLE Orders ( Id_O int NOT NULL PRIMARY KEY, OrderNo int NOT NULL, [code]Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)
[/code]
如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders ( Id_O int NOT NULL, OrderNo int NOT NULL, Id_P int, PRIMARY KEY (Id_O), [code]CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)
[/code]
SQL FOREIGN KEY Constraint on ALTER TABLE
如果在 "Orders" 表已存在的情况下为 "Id_P" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders [code]ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
[/code]
如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders [code]ADD CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
[/code]
撤销 FOREIGN KEY 约束
如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:MySQL:
ALTER TABLE Orders [code]DROP FOREIGN KEY fk_PerOrders
[/code]
SQL Server / Oracle / MS Access:
ALTER TABLE Orders [code]DROP CONSTRAINT fk_PerOrders
相关文章推荐
- SQL错误:无法删除对象 '****',因为该对象正由一个 FOREIGN KEY 约束引用。
- SQL错误:无法删除对象 '****',因为该对象正由一个 FOREIGN KEY 约束引用。
- 在不同SQL服务器上的数据库之间表记录的复制(sql语句实现)
- 在不同SQL服务器上的数据库之间表记录的复制(sql语句实现)
- sql 创建外键关系时,ALTER TABLE 语句与 FOREIGN KEY 约束"FK_Doorl_REFERENCE_Floor"冲突
- 利用eclipse比较两个文件的代码差异或者一个文件不同版本之间的异同
- 同一个SQL语句 会由于表的数据(量、和值个数不同等)变化而执行不同的执行计划
- 在不同SQL服务器上的数据库之间表记录的复制(sql语句实现)
- 怎么打开OPENDATASOURCE权限(不同服务器数据库之间的数据操作) -*-- 在T-SQL语句中访问远程数据库(openrowset/opendatasource/openquery) --- OpenDataSource的用法
- 必须会的SQL语句(八)数据库的完整性约束
- 关于enum ,调用webservice,用户控件与主页面之间的交互,datsource属性,net面试题,反射类生成sql语句,URl重写一个小实例
- sql语句,怎么查看一个表中的所有约束
- SQL语句,表与表之间的引用
- 一些比较少用的SQL语句,实现不同数据库之间信息的传递
- 主流数据库之间对SQL:2003标准的不同实现方法比较(第五部分 Insert语句)
- 在同一个sql语句中写不同条件的count数量,和查询半年的数据
- MVC4 违反了引用完整性约束: 在此关系的主对象和依赖对象之间,定义引用约束的属性值不一致。
- 在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名
- 用不同的SQL语句查出多个结果存入一个数据集的同一个字段的代码例子