SQL FOREIGN KEY 约束- 保障表之间关系完整性的关键规则
SQL FOREIGN KEY 约束
SQL FOREIGN KEY 约束用于防止破坏表之间关系的操作。FOREIGN KEY 是一张表中的字段(或字段集合),它引用另一张表中的主键。具有外键的表称为子表,具有主键的表称为被引用表或父表。
以下是两个表的例子:
Persons 表
PersonID LastName FirstName Age
1 Hansen Ola 30
2 Svendson Tove 23
3 Pettersen Kari 20
Orders 表
OrderID OrderNumber PersonID
1 77895 3
2 44678 3
3 22456 2
4 24562 1
注意,"Orders" 表中的 "PersonID" 列指向 "Persons" 表中的 "PersonID" 列。"Persons" 表中的 "PersonID" 列是 "Persons" 表中的主键。"Orders" 表中的 "PersonID" 列是 "Orders" 表中的外键。
FOREIGN KEY 约束防止将无效数据插入到外键列中,因为它必须是父表中包含的值之一。
在 CREATE TABLE 时使用 SQL FOREIGN KEY
以下 SQL 在创建 "Orders" 表时在 "PersonID" 列上创建了一个 FOREIGN KEY:
对于 MySQL:
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
对于 SQL Server / Oracle / MS Access:
CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
要允许对 FOREIGN KEY 约束进行命名,并在多列上定义 FOREIGN KEY 约束,请使用以下 SQL 语法:
对于 MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
在 ALTER TABLE 时使用 SQL FOREIGN KEY
要在表已经创建的情况下在 "PersonID" 列上创建 FOREIGN KEY 约束,请使用以下 SQL:
对于 MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
要允许对 FOREIGN KEY 约束进行命名,并在多列上定义 FOREIGN KEY 约束,请使用以下 SQL 语法:
对于 MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
删除 FOREIGN KEY 约束
要删除 FOREIGN KEY 约束,请使用以下 SQL:
对于 MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
对于 SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;
通过这些 SQL 语句,您可以在数据库中定义和管理 FOREIGN KEY 约束,以确保表之间的关系得到维护。
SQL CHECK 约束
SQL CHECK 约束用于限制可以放入列中的值范围。如果在列上定义了 CHECK 约束,它将仅允许为该列指定某些值。如果在表上定义了 CHECK 约束,它可以基于行中其他列的值来限制某些列中的值。
在 CREATE TABLE 时使用 SQL CHECK
以下 SQL 在创建 "Persons" 表时在 "Age" 列上创建了一个 CHECK 约束。CHECK 约束确保一个人的年龄必须是 18 岁或以上:
对于 MySQL:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CHECK (Age>=18)
);
对于 SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int CHECK (Age>=18)
);
要允许对 CHECK 约束进行命名,并在多列上定义 CHECK 约束,请使用以下 SQL 语法:
对于 MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);
在 ALTER TABLE 时使用 SQL CHECK
要在表已经创建的情况下在 "Age" 列上创建 CHECK 约束,请使用以下 SQL:
对于 MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CHECK (Age>=18);
要允许对 CHECK 约束进行命名,并在多列上定义 CHECK 约束,请使用以下 SQL 语法:
对于 MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sandnes');
删除 CHECK 约束
要删除 CHECK 约束,请使用以下 SQL:
对于 SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;
对于 MySQL:
ALTER TABLE Persons
DROP CHECK CHK_PersonAge;
通过这些 SQL 语句,您可以在数据库中定义和管理 CHECK 约束,以确保列中的值满足指定的条件。
SQL DEFAULT 约束
SQL DEFAULT 约束用于为列设置默认值。如果没有指定其他值,将在所有新记录中添加默认值。
在 CREATE TABLE 时使用 SQL DEFAULT
以下 SQL 在创建 "Persons" 表时为 "City" 列设置了 DEFAULT 值:
对于 MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255) DEFAULT 'Sandnes'
);
DEFAULT 约束还可以用于通过使用诸如 GETDATE() 之类的函数插入系统值:
CREATE TABLE Orders (
ID int NOT NULL,
OrderNumber int NOT NULL,
OrderDate date DEFAULT GETDATE()
);
在 ALTER TABLE 时使用 SQL DEFAULT
要在表已经创建的情况下在 "City" 列上创建 DEFAULT 约束,请使用以下 SQL:
对于 MySQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'Sandnes';
对于 SQL Server:
ALTER TABLE Persons
ADD CONSTRAINT df_City
DEFAULT 'Sandnes' FOR City;
对于 MS Access:
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'Sandnes';
对于 Oracle:
ALTER TABLE Persons
MODIFY City DEFAULT 'Sandnes';
删除 DEFAULT 约束
要删除 DEFAULT 约束,请使用以下 SQL:
对于 MySQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT;
对于 SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;
对于 SQL Server:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;
通过这些 SQL 语句,您可以在数据库中为列设置默认值,确保在插入新记录时,如果未提供值,将使用指定的默认值。
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
SQL FOREIGN KEY 约束- 保障表之间关系完整性的关键规则的更多相关文章
- SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束
SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...
- SQL FOREIGN KEY 约束
SQL FOREIGN KEY 约束 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY. 让我们通过一个例子来解释外键.请看下面两个表: "Persons&quo ...
- SQL-W3School-高级:SQL FOREIGN KEY 约束
ylbtech-SQL-W3School-高级:SQL FOREIGN KEY 约束 1.返回顶部 1. SQL FOREIGN KEY 约束 一个表中的 FOREIGN KEY 指向另一个表中的 P ...
- 更改具有Foreign key约束的表
1.Foreign key 说明: foreign key(外键) 建立起了表与表之间的约束关系,让表与表之间的数据更具有完整性和关联性.设想,有两张表A.B,A表中保存了许多电脑制造商的信息,比如联 ...
- SQL Server 2008 R2——TRUNCATE TABLE 无法截断表 该表正由 FOREIGN KEY 约束引用
=================================版权声明================================= 版权声明:原创文章 禁止转载 请通过右侧公告中的“联系邮 ...
- sqlserver truncate清空表时候,无法删除 'B表',因为该表正由一个 FOREIGN KEY 约束引用。
外键: 查询:select object_name(a.parent_object_id) 'tables' from sys.foreign_keys a where a.referenced_ ...
- SQLServer之FOREIGN KEY约束
FOREIGN KEY约束添加规则 1.外键约束并不仅仅可以与另一表的主键约束相链接,它还可以定义为引用另一个表中 UNIQUE 约束的列. 2.如果在 FOREIGN KEY 约束的列中输入非 NU ...
- SQLServer 中有五种约束, Primary Key 约束、 Foreign Key 约束、 Unique 约束、 Default 约束和 Check 约束
一直在关注软件设计方面,数据库方面就忽略了很多,最近在设计数据库时遇到了一些小麻烦,主要是数据库中约束和性能调优方面的应用,以前在学习 Sql Server 2000,还有后来的 Sql Server ...
- 删除提示 FOREIGN KEY 约束引用”
有时想删除某个表时,提示“无法删除对象 'Orders',因为该对象正由一个 FOREIGN KEY 约束引用”,原因很简单不要急躁,它被其它表的外键引用了,所以无法删除,在此只需先找到哪些表的外键引 ...
- SQLServer之修改FOREIGN KEY约束
使用SSMS数据库管理工具修改FOREIGN KEY约束 1.连接数据库,选择数据表->右键点击->选择设计(或者展开键,选择要修改的外键,右键点击,选择修改,后面修改步骤相同). 2.在 ...
随机推荐
- SSH不对称密钥自动登入服务器
SSH不对称密钥自动登入服务器 1.先在自己的电脑上创建密钥对 ssh-keygen -t rsa Windows下生成SSH密钥 $ ssh-keygen -t rsa -C "youre ...
- 【Azure 微服务】Azure Service Fabric 因证书问题而使得 Node 一直处于 Down 状态
问题描述 Service Fabric 集群更新证书后,重启Node后就变为Down的状态,反复 Restart 结果反复Down 问题分析 根据Service Fabric的文档表示,修改证书时一定 ...
- Java 属性赋值的先后顺序
1 package com.bytezero.circle; 2 /** 3 * 4 * @Description 5 * @author Bytezero·zhenglei! Email:42049 ...
- OBS Studio多开/多平台直播的最佳解决方案
OBS是一款强大的PC端免费的直播推流及录制工具,功能很强大,它支持开发者根据需求开发插件集成使用 我们知道OBS支持通过插件来实现多路推流,它的优点是只需开启一个OBS窗口就可以同时推流到多个不同的 ...
- 使用 Docker 部署 Fiora 在线聊天室平台
一.Fiora 介绍 Fiora 简介 Fiora 是一款开源免费的在线聊天系统. GitHub:https://github.com/yinxin630/fiora Fiora 功能 注册账号并登录 ...
- 创建 nest-websocket 服务 用于mock单点登录开发
需求 有个单点登录的任务,但是都是现场的服务 api 和 websocket 都在现在 开发本机mock服务 本地搭建环境先模拟一下 资料 NestJS WebSocket 开始使用 https:// ...
- 让 js 失效 Chrome F12 右上角 settings - Preferences - Debugger - Disable JavaScript
说的可能比较长,实际上,F12 右上角 - 右小角 还是挺好找的.
- yarn install --offline 离线安装 回头试试 npm install ./package.tgz
yarn install --offline npm pack npm install ./package.tgz 尝试了 npm-pack-all --dev-deps 也不行,太慢,等了20分钟 ...
- 基于AmbiqMicro-AMA3B2KK-KBR的可穿戴智能手环解决方案之心率测量源码解析
一 前记 梳理该可穿戴产品的手环,产品,是一种成长.也是一个总结. 二 源码解析 1 初始化:这里主要初始化心率的检测间隔时间和心率值的位数. /* initialize heart rate pro ...
- github无法访问?vscode 无法使用github登录同步? 改 hosts 吧
一.无法访问 github.com ? 想要去 github.com 上拿来主义,结果访问不了,或者 npm 时一直失败? 是什么原因不用问,直接使用 https://tool.lu/ip/ 查询到 ...