1. 空值约束(NULL或NOT NULL)
空值约束决定属性值是否运行为空值(NULL)。NULL表示没有输入任何内容,它不是零和空白。不允许为空值用NOT NULL表示。
eg:新建学生表,设置姓名不允许为空,性别允许为空。
CREATE TABLE stu ( name CHAR(10) NOT NULL, sex CHAR(2) NULL )
2. 主键约束(PRIMARY KEY CONSTRAINT)
主键约束要求主键属性取值必须唯一,一个表只能包含一个主键约束。如果没有在主健约束中指定CLUSTERED或NONCLUSTERED,并且没有为UNIQUE约束指定聚集索引,则将对该主健约束用CLUSTERED。
语法:[CONSTRAINT 约束名] PRIMARY KEY [CLUSTERED | NONCLUSTERED] (列名 [,...n])
eg1:新建学生表,将id设置为主键
CREATE TABLE stu ( id CHAR(12) NOT NULL, name CHAR(10) NOT NULL, sex CHAR(2) NULL, CONSTRAINT pk_stu PRIMARY KEY CLUSTERED (id) )
eg2:新建学生表,将id和name设置为联合主键
CREATE TABLE stu ( id CHAR(12) NOT NULL, name CHAR(10) NOT NULL, sex CHAR(2) NULL, CONSTRAINT pk_stu PRIMARY KEY CLUSTERED (id,name) )
3. 唯一性约束(UNIQUE CONSTRAINT)
唯一性约束用于指定一个或者多个列的组合的值具有唯一性,以防止在列中输入重复的值。使用唯一性约束时,需考虑一下因素:
- 使用唯一性约束的字段允许为空值
- 一个表中可以允许有多个唯一性约束
- 可以把唯一性约束定义在多个字段上
- 唯一性约束用于强制在指定字段上创建一个唯一性索引
- 在默认情况下,创建的索引类型为非聚簇索引
语法:[CONSTRAINT 约束名] UNIQUE [CLUSTERED | NONCLUSTERED] (列名 [,...n])
eg:创建学生表,设置id和phone唯一
CREATE TABLE stu ( id CHAR(12) NOT NULL, name CHAR(10) NOT NULL, phone CHAR(11) NULL, CONSTRAINT uniq_stu UNIQUE (id, phone) )
4. 检查约束(CHECK CONSTRAINT)
使用检查约束时,应该注意:
- 一个列级检查约束只能与限制的字段有关,一个表级检查约束只能与限制的表中字段有关
- 一个表可以定义多个检查约束
- 每个CREATE TABLE语句中每个字段只能定义一个检查约束
- 在多个字段上定义检查约束,则必须将检查约束定义为表级约束
- 检查约束中不能包含子查询
语法:CONSTRAINT CONSTRAINT_name
CHECK [NOT FOR REPLICATION] (logical_expression)
eg:新建学生表,设置id只接受首位非0的四位数,性别字段只能设为F或M
CREATE TABLE stu ( id int NOT NULL, name VARCHAR(10) NOT NULL, sex CHAR(1) NULL, CONSTRAINT chk_id CHECK (id LIKE '[1-9][0-9][0-9][0-9]'), CONSTRAINT chk_sex CHECK (sex IN ('F','M')) )
5. 默认约束(DEFAULT CONSTRAINT)
使用默认约束时,应该注意:
- 每个字段只能定义一个默认约束
- 如果定义的默认值长于其字段的最大长度,该默认值输入到表中将被截断
- 不能加入到带有IDENTITY属性或数据类型为timestamp的字段上
- 如果字段定义为用户定义的数据类型,并且该数据类型绑定到这个字段上,则不允该字段由默认约束
6. 外部键约束(FOREIGN KEY CONSTRAINT)
外部键约束用于强制参照完整性,提供单个字段或者多个字段的参照完整性。当使用外部键约束时,应该考虑以下几个因素:
- 外部键约束提供字段参照完整性
- 外部键从句中的字段数目和每个字段指定的数据类型必须和REFERENCES从句中的字段相匹配
- 外部键约束不能自动创建索引,需要用户手动创建
- 一个表中最多可以用31个外部键约束
- 在临时表中,不能使用外部键约束
- 主键和外部键的数据类型必须严格匹配
- 如果需要级联修改和删除,要使用ON UPDATE CASCADE ON DELETE CASCADE
语法:[CONSTRAINT 约束名] FOREIGN KEY (外键列名) REFERENCES 参照表 (参照列名) [ON UPDATE CASCADE ON DELETE CASCADE]
外键约束主要用来维护两个表之间的一致性关系。
外键的建立主要是通过将一个表的主键所在列包含在另一个表中,这些列就是另一个表的外键。
eg:新建学生表和成绩表,设置stu_id为学生表的主键,成绩表的外键并参照学生表的stu_id
CREATE TABLE stu ( stu_id CHAR(12) NOT NULL, name CHAR(10) NOT NULL, sex CHAR(2) NULL, CONSTRAINT pk_stu PRIMARY KEY CLUSTERED (stu_id) ) CREATE TABLE grade ( stu_id CHAR(12) NOT NULL, course_id CHAR(10) NOT NULL, score INT, CONSTRAINT fk_stu_id FOREIGN KEY (stu_id) REFERENCES stu(stu_id) )