约束有缠缚,束缚,按照约定(特定)条件限制,管束等意思。约束的作用是添加、删除。
约束类型
主键约束(Primary Key constraint):要求主键列数据唯一,并且不允许为空。
唯一约束(Unique constraint):要求该列唯一,允许为空,但只能出现一个空值。
检查约束(Check constraint):某列取值范围限制,格式限制等,如有关年龄、邮箱(必须有@)的约束。
默认约束(Default constraint):某列的默认值,如在数据库里有一项数据很多重复,可以设为默认值。
外键约束(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)
添加外键约束(主表 stuInfo 和从表 stuGrade 建立关系,关联字段为 stuNo ):
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. 级联 删除包含外键关系中所涉及的数据的所有行。
c. 设置空 如果表的所有外键列都可接受空值,则将该值设置为空。仅适用于 SQL Server 2005。
d. 设置默认值 如果表的所有外键列均已定义默认值,则将该值设置为列定义的默认值。仅适用于 SQL Server 2005。
更新规则
指定当数据库的用户尝试更新某一行,而该行包含外键关系所涉及的数据时所发生的情况。如果设置为:
a. 无操作 显示一条错误信息,告知用户不允许执行该删除操作,DELETE 将被回滚。
b. 级联 删除包含外键关系中所涉及的数据的所有行。
c. 设置空 如果表的所有外键列都可接受空值,则将该值设置为空。仅适用于 SQL Server 2005。
e. 设置默认值 如果表的所有外键列均已定义默认值,则将该值设置为列定义的默认值。仅适用于 SQL Server 2005。