求真百科欢迎当事人提供第一手真实资料,洗刷冤屈,终结网路霸凌。

约束查看源代码讨论查看历史

事实揭露 揭密真相
跳转至: 导航搜索
约束

约束,读音为yuē shù ,有缠缚束缚,按照约定(特定)条件限制管束等意思。[1]

基本信息

中文名 约束

外文名 Constrains

类型 结构化查询语言 [2]

作用 添加、删除

约束1.jpg

约束类型 主键约束等

近义词 拘谨,收敛,管制

反义词 放纵,放荡

约束类型

约束2.jpg

主键约束(Primary Key constraint):要求主键列数据唯一,并且不允许为空。

唯一约束(Unique constraint):要求该列唯一,允许为空,但只能出现一个空值。

检查约束(Check constraint):某列取值范围限制,格式限制等,如有关年龄、邮箱(必须有@)的约束。

默认约束(Default constraint):某列的默认值,如在数据库里有一项数据很多重复,可以设为默认值。

外键约束(Foreign Key constraint):用于在两个表之间建立关系,需要指定引用主表的哪一列。

添加

语法:

约束3.jpg

ALTER TABLE 表名

ADD CONSTRAINT 约束名 约束 类型 具体的约束说明

上述语法表示修改某个表,添加某个约束。其中,约束名的命名规则推荐采用"约束类型_约束字段"这样的形式。[1]

示例:

添加主键约束(将stuNo设为主键):

ALTER TABLE stuInfo

ADD CONSTRAINT PK_stuNo PRIMARY KEY (stuNo)

添加唯一约束(身份证号唯一):

约束4.jpg

ALTER TABLE stuInfo

ADD CONSTRAINT UQ_stuID UNIQUE (stuID)

添加默认约束(如果地址不填,默认为"地址不详"):

ALTER TABLE stuInfo

ADD CONSTRAINT DF_stuAddress DEFAULT ('地址不详') FOR stuAddress

添加检查约束(要求年龄只能在 15~40岁之间)

ALTER TABLE stuInfo

约束5.jpg

ADD CONSTRAINT CK_stuAge CHECK(stuAge BETWEEN 15 AND 40)

添加外键约束(主表 stuInfo 和从表 stuGrade 建立关系,关联字段为 stuNo ):

ALTER TABLE stuGrade

ADD CONSTRAINT FK_stuNo

FOREIGN KEY (stuNo) REFERENCES stuInfo(stuNo)

GO

删除

语法

ALTER TABLE 表名

约束6.jpg

DROP CONSTRAINT 约束名

示例:

删除stuInfo表中地址默认约束的语句:

ALTER TABLE stuInfo

DROP CONSTRAINT DF_stuAddress

删除外键约束注意事项:

对于存在外键约束的表,如果进行删除非空的外键,可能会出现错误。

a. 如果在 FOREIGN KEY 约束的列中输入非 NULL 值,则此值必须在被引用的列中存在,否则将返回违反外键约束的错误信息。

b. FOREIGN KEY 约束应用于前面所讲的列,除非指定了源列。

约束7.png

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 约束。

约束8.jpg

j. 每个表在其 FOREIGN KEY 约束中最多可以引用 253 个不同的表。

k. FOREIGN KEY 约束只能引用被引用表的 PRIMARY KEY 或 UNIQUE 约束中的列或被引用表上 UNIQUE INDEX 中的列。

INSERT 和 UPDATE 规范类别

展开以显示有关该关系的"删除规则"和"更新规则"的信息。

删除规则

指定当数据库的最终用户尝试删除某一行,而该行包含外键关系所涉及的数据时所发生的情况。如果设置为:

a. 无操作 显示一条错误信息,告知用户不允许执行该删除操作,DELETE 将被回滚。

b. 级联 删除包含外键关系中所涉及的数据的所有行。

c. 设置空 如果表的所有外键列都可接受空值,则将该值设置为空。仅适用于 SQL Server 2005。

d. 设置默认值 如果表的所有外键列均已定义默认值,则将该值设置为列定义的默认值。仅适用于 SQL Server 2005。

约束9.jpg

更新规则

指定当数据库的用户尝试更新某一行,而该行包含外键关系所涉及的数据时所发生的情况。如果设置为:

a. 无操作 显示一条错误信息,告知用户不允许执行该删除操作,DELETE 将被回滚。

b. 级联 删除包含外键关系中所涉及的数据的所有行。

c. 设置空 如果表的所有外键列都可接受空值,则将该值设置为空。仅适用于 SQL Server 2005。

e. 设置默认值 如果表的所有外键列均已定义默认值,则将该值设置为列定义的默认值。仅适用于 SQL Server 2005。

参考来源