约束是结构化查询语言(SQL)中用于确保数据完整性的核心机制,通过定义表结构时或修改表时施加限制条件,防止无效数据并维护关联关系。其实现依赖数据定义语言(DDL)命令,如CREATE/ALTER TABLE。
主要约束类型包括主键(唯一标识记录)、外键(维护表间关联)、唯一、非空、检查及默认约束等。主键和外键构成实体与参照完整性保障,其他约束实现字段级数据验证。通过级联操作和动态管理(如ALTER TABLE)可扩展约束效果。
作为关系数据库标准组成部分,约束机制随SQL发展逐步完善,从早期版本的基础约束到支持断言、检查约束等复杂规则。不同数据库系统扩展了特定约束功能,如MySQL的自增主键,反映其在数据管理中的持续演进。
- 中文名
- 约束
- 外文名
- Constrains
- 类 型
- 结构化查询语言
- 作 用
- 添加、删除
- 约束类型
- 主键约束等
- 近义词
- 拘谨,收敛,管制
- 反义词
- 放纵,放荡
约束类型
播报编辑
主键约束(Primary 腊兆民Key constraint):要求主键列数据唯一,并且不允许为空。
检查约束(Check灶戒章 constraint):某列取值范围限制,格式限制等,如有关年龄、邮箱(必须有@)的约束。
默认约阀连遥估束(Default co再慨微nstraint):某列的默认值,如在数和连据库里有一项数据很多重复,可以设为默认值。
外键约束(Foreign Key constraint):用于在两个表之间建立关系,需要指定引用主表的哪祝屑一列。
添加
播报编辑
语法:
ALTER TABLE 表名
ADD CONSTRAINT 约束名 约束 类型 具体的约束说明
上述语法表示修改某个表,添加某个约束。其中,约束名的命名规则推荐采用“约束类型_约束字段”这样的形式。
示例:
添加主键约束(将stuNo设为主键):
ALTER TABLE stuInfo
ADD CONSTRAINT PK_stuNo PRIMARY KEY (stuNo)
ALTER TABLE stuInfo
ADD CONSTRAINT UQ_stuID UNIQUE (stuID)
添加默认约束(如果地址不填,默认为“地址不详”):
ALTER TABLE stuInfo
ADD CONSTRAINT DF_stuAddress DEFAULT ('地址不详') FOR stuAddress
添加检查约束(要求年龄只能在 15~40岁之间)
ALTER TABLE stuInfo
ADD CONSTRAINT CK_stuAge CHECK(stuAge BETWEEN 15 AND 40)
ALTER TABLE stuGrade
ADD CONSTRAINT FK_stuNo
FOREIGN KEY (stuNo) REFERENCES stuInfo(stuNo)
GO
删除
播报编辑
语法
ALTER TABLE 表名
DROP CONSTRAINT 约束名
示例:
删除stuInfo表中地址默认约束的语句:
ALTER TABLE stuInfo
DROP CONSTRAINT DF_stuAddress
对于存在外键约束的表,如果进行删除非空的外键,可能会出现错误。
a. 如果在 FOREIGN KEY 约束的列中输入非 NULL 值,则此值必须在被引用的列中存在,否则将返回违反外键约束的错误信息。
b. FOREIGN KEY 约束应用于前面所讲的列,除非指定了源列。
c. FOREIGN KEY 约束仅能引用位于同一服务器上的同一数据库中的表。数据库间的引用完整性必须通过触发器实现。有关更多信息,请参见 CREATE TRIGGER。
d. FOREIGN KEY 可以引用同一表中的其它列(自引用)。
e. 列级 FOREIGN KEY 约束的 REFERENCES 子句仅能列出一个引用列,且该列必须与定义约束的列具有相同的数据类型。
f. 表级 FOREIGN KEY 约束的 REFERENCES 子句中引用列的数目必须与约束列列表中的列数相同。每个引用列的数据类型也必须与列表中相应列的数据类型相同。
e. 如果 timestamp 类型的列是外键或被引用键的一部分,则不能指定 CASCADE。
g. 可以在相互间具有引用关系的表上组合使用 CASCADE 和 NO ACTION。如果 SQL Server 遇到 NO ACTION,将终止执行语句并回滚相关的 CASCADE 操作。当 DELETE 语句导致 CASCADE 和 NO ACTION 组合操作时,在 SQL Server 检查 NO ACTION 操作之前将执行所有 CASCADE 操作。
h. 一个表最多可包含 253 个 FOREIGN KEY 约束。
i. 对于临时表不强制 FOREIGN KEY 约束。
j. 每个表在其 FOREIGN KEY 约束中最多可以引用 253 个不同的表。
k. FOREIGN KEY 约束只能引用被引用表的 PRIMARY KEY 或 UNIQUE 约束中的列或被引用表上 UNIQUE INDEX 中的列。
INSERT 和 UPDATE 规范类别
展开以显示有关该关系的“删除规则”和“更新规则”的信息。
删除规则
a. 无操作 显示一条错误信息,告知用户不允许执行该删除操作,DELETE 将被回滚。
b. 级联 删除包含外键关系中所涉及的数据的所有行。
d. 设置默认值 如果表的所有外键列均已定义默认值,则将该值设置为列定义的默认值。仅适用于 SQL Server 2005。
更新规则
a. 无操作 显示一条错误信息,告知用户不允许执行该删除操作,DELETE 将被回滚。
b. 级联 删除包含外键关系中所涉及的数据的所有行。
e. 设置默认值 如果表的所有外键列均已定义默认值,则将该值设置为列定义的默认值。仅适用于 SQL Server 2005。