SQL Server 之约束 (Constraint)

978 阅读3分钟

SQL Server的约束有六种,分别是:

Primary Key、Foreign Key、check、unique、default、not null。

下面对他们分别介绍。

Primary Key(主键)

定义:

​ 数据库主键,指的是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。主键主要P是K用与其他表的外键关联,以及本记录的修改与删除。

​ PRIMARY KEY 约束唯一标识数据库表中的每条记录。

​ 主键必须包含唯一的值。

​ 主键列不能包含 NULL 值。

​ 每个表都应该有一个主键,并且每个表只能有一个主键。

用法:

​ 1.向选课表添加主键约束,以sno和cno为联合主键,主键名字为PK_SC。

alter table 选课
add constraint PK_SC primary key(sno,cno)

​ 2.删除选课表的PK_SC主键约束

alter table 选课
drop constraint PK_SC

​ 3.向学生表添加主键,以sno为主键

alter table 学生
add primary key(sno)

Foreign Key (外键)

定义:

​ 表的外键是另一表的主键, 外键可以有重复的, 可以是空值。

​ FOREIGN KEY 约束用于预防破坏表之间连接的动作。

​ FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

用法:

​ 1.向SC表添加外键约束,将sno列指向student表中的sno列,外键名字为FK_sno。

alter table SC
add constraint FK_sno foreign key(sno) references student(sno)

​ 2.删除SC表的FK_sno外键约束

alter table SC
drop constraint FK_sno

Check (检查)

定义:

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

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

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

用法:

​ 1.向student表中的sage列添加check约束,限制在15-25之间,check约束名为CK_student_sage

alter table student
add constraint CK_student_sage check(sage between 15 and 25) 

​ 2.删除上面创建的check约束

alter table student
drop constraint CK_student_sage

Uinque (唯一)

定义:

​ UNIQUE 约束唯一标识数据库表中的每条记录。

​ UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

​ PRIMARY KEY 拥有自动定义的 UNIQUE 约束。

​ 请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

用法:

​ 1.向student表中的sname列添加unique约束。

alter table student
add unique(sname)

​ 2.如需命名unique约束,并定义多个列的unique约束,请使用下面的 SQL 语法。

alter table student
add constraint UC_stu unique(sage,sex)

Default (默认)

定义:

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

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

用法:

​ 1.向student表中的sage添加default约束,默认18

alter table student
alter column sage 
set default 18

​ 2.撤销student表中sage列的约束

alter table student
alter column sage 
drop default

Not Null (非空)

定义:

​ NOT NULL 约束强制列不接受 NULL 值。

​ NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

用法:

​ 1.修改student表的sname列为非空

alter table student
alter column sname char(8) not null

​ 2.取消非空约束

alter table student
alter column sname char(8) null