SQL基础知识V2——约束(实例)下

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: SQL数据库开发

CREATE TABLE 时的FOREIGN KEY 约束

下面的 SQL 在 "Orders" 表创建时在 "客户ID" 列上创建 FOREIGN KEY 约束:

MySQL:

CREATE TABLE Orders
(
 订单ID INT  NOT NULL,
 客户ID INT NULL,
 员工ID INT NULL,
 订单日期 DATETIME NULL,
 发货ID INT NULL,
 PRIMARY KEY (订单ID),
 FOREIGN KEY (客户ID) REFERENCES Customers(客户ID)
)

SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
 订单ID INT  NOT NULL PRIMARY KEY,
 客户ID INT NULL,
 员工ID INT NULL,
 订单日期 DATETIME NULL,
 发货ID INT NULL,
 FOREIGN KEY (客户ID) REFERENCES Customers(客户ID)
)

如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
 订单ID INT  NOT NULL,
 客户ID INT NULL,
 员工ID INT NULL,
 订单日期 DATETIME NULL,
 发货ID INT NULL,
 PRIMARY KEY (订单ID),
 CONSTRAINT fk_CusOrders FOREIGN KEY (客户ID)
 REFERENCES Customers(客户ID)
)


ALTER TABLE 时的FOREIGN KEY 约束

当 "Orders" 表已被创建时,如需在 "客户ID" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (客户ID)
REFERENCES Customers(客户ID)

如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT fk_CusOrders
FOREIGN KEY (客户ID)
REFERENCES Persons(客户ID)


删除 FOREIGN KEY 约束

如需删除FOREIGN KEY 约束,请使用下面的 SQL:

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY fk_CusOrders

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT fk_CusOrders


DEFAULT约束

DEFAULT 约束用于向列中插入默认值。

如果没有规定其他的值,那么会将默认值添加到所有的新记录。


CREATE TABLE 时的DEFAULT 约束

下面的 SQL 在 "Customers" 表创建时在 "城市" 列上创建 DEFAULT 约束:

My SQL / SQL Server / Oracle / MS Access:

CREATE TABLE dbo.Customers(
 客户ID INT  NOT NULL,
 姓名 VARCHAR(10) NULL,
 地址 VARCHAR(50) NULL,
 城市 VARCHAR(20) NULL DEFAULT '北京市',
 邮编 CHAR(6) NULL,
 省份 VARCHAR(20) NULL
) ;

SQL Server中通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:

CREATE TABLE dbo.Orders(
 订单ID INT  NOT NULL,
 客户ID INT NULL,
 员工ID INT NULL,
 订单日期 DATETIME NULL DEFAULT GETDATE(),
 发货ID INT NULL
) ;



ALTER TABLE 时的DEFAULT 约束

当表已被创建时,如需在 "城市" 列创建 DEFAULT 约束,请使用下面的 SQL:

MySQL:

ALTER TABLE Customers
ALTER 城市 SET DEFAULT '北京市'

SQL Server / MS Access:

ALTER TABLE Customers
ADD CONSTRAINT DF_Customers DEFAULT('北京市') FOR 城市

--注释
--Customers为表名
--城市 为列名
--DF_Customers 为我们创建的默认约束的名称 约束名称一般为:约束类型简称_表名

Oracle:

ALTER TABLE Customers
MODIFY 城市 DEFAULT '北京市'



删除DEFAULT 约束

如需删除DEFAULT 约束,请使用下面的 SQL:

MySQL:

ALTER TABLE Customers
ALTER 城市 DROP DEFAULT

SQL Server / Oracle / MS Access:

ALTER TABLE Customers
ALTER COLUMN 城市 DROP DEFAULT



CHECK约束

CHECK 约束用于限制列中的值的范围。

如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。

CREATE TABLE 时的CHECK 约束

下面的 SQL 在 "Customers" 表创建时在 "客户ID" 列上创建 CHECK 约束。CHECK 约束规定 "客户ID" 列必须只包含大于 0 的整数。

MySQL:

CREATE TABLE dbo.Customers(
 客户ID INT  NOT NULL,
 姓名 VARCHAR(10) NULL,
 地址 VARCHAR(50) NULL,
 城市 VARCHAR(20) NULL,
 邮编 CHAR(6) NULL,
 省份 VARCHAR(20) NULL,
 CHECK (客户ID>0)
) ;


SQL Server / Oracle / MS Access:

CREATE TABLE dbo.Customers(
 客户ID INT  NOT NULL CHECK (客户ID>0),
 姓名 VARCHAR(10) NULL,
 地址 VARCHAR(50) NULL,
 城市 VARCHAR(20) NULL,
 邮编 CHAR(6) NULL,
 省份 VARCHAR(20) NULL
) ;

如需命名 CHECK 约束,并定义多个列的 CHECK 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE dbo.Customers(
 客户ID INT  NOT NULL,
 姓名 VARCHAR(10) NULL,
 地址 VARCHAR(50) NULL,
 城市 VARCHAR(20) NULL,
 邮编 CHAR(6) NULL,
 省份 VARCHAR(20) NULL,
 CONSTRAINT chk_Customers CHECK (客户ID>0 AND 城市='北京市')
) ;


ALTER TABLE 时的CHECK 约束

当表已被创建时,如需在 "客户ID" 列创建 CHECK 约束,请使用下面的 SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Customers
ADD CHECK (客户ID>0)

如需命名 CHECK 约束,并定义多个列的 CHECK 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Customers
ADD CONSTRAINT chk_Customers CHECK (客户ID>0 AND 城市='北京市')


删除CHECK 约束

如需CHECK 约束,请使用下面的 SQL:

SQL Server / Oracle / MS Access:

ALTER TABLE Customers
DROP CONSTRAINT chk_Customers

MySQL:

ALTER TABLE Customers
DROP CHECK chk_Customers


批注

以上六种约束是工作中经常使用到的,主要还是用来规范数据,随着数据量的增多,如果不对表结构加以约束,那么会有越来越多的“脏数据”进入到数据库,这对业务系统来说是非常不愿意碰到的。所以为了能够高效的使用数据库,请从表结构的设计上下更多的功夫。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
SQL 数据管理 数据库
SQL语句实例教程:掌握数据查询、更新与管理的关键技巧
SQL(Structured Query Language,结构化查询语言)是数据库管理和操作的核心工具
|
15天前
|
SQL 存储 数据库
SQL学习一:ACID四个特性,CURD基本操作,常用关键字,常用聚合函数,五个约束,综合题
这篇文章是关于SQL基础知识的全面介绍,包括ACID特性、CURD操作、常用关键字、聚合函数、约束以及索引的创建和使用,并通过综合题目来巩固学习。
24 1
|
20天前
|
数据库
SQL_语句常见的操作创建,使用,删除表和表级约束
SQL_语句常见的操作创建,使用,删除表和表级约束
26 0
|
3月前
|
SQL 数据采集 关系型数据库
7、SQL约束
7、SQL约束
43 0
|
4月前
|
SQL Oracle 关系型数据库
CREATE TABLE 时的 SQL FOREIGN KEY 约束
【7月更文挑战第24天】CREATE TABLE 时的 SQL FOREIGN KEY 约束。
48 5
|
4月前
|
SQL Oracle 关系型数据库
ALTER TABLE 时的 SQL PRIMARY KEY 约束
【7月更文挑战第24天】ALTER TABLE 时的 SQL PRIMARY KEY 约束。
35 3
|
4月前
|
SQL Oracle 关系型数据库
CREATE TABLE 时的 SQL FOREIGN KEY 约束
【7月更文挑战第19天】CREATE TABLE 时的 SQL FOREIGN KEY 约束
39 8
|
4月前
|
SQL Oracle 关系型数据库
CREATE TABLE 时的 SQL PRIMARY KEY 约束
【7月更文挑战第24天】CREATE TABLE 时的 SQL PRIMARY KEY 约束。
40 2
|
4月前
|
SQL Oracle 关系型数据库
SQL CHECK 约束
【7月更文挑战第19天】SQL CHECK 约束。
44 5
|
4月前
|
SQL 关系型数据库 MySQL
ALTER TABLE 时的 SQL DEFAULT 约束
【7月更文挑战第20天】ALTER TABLE 时的 SQL DEFAULT 约束。
40 1