六,SQL Server完整性约束条件

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)
)

 

posted @ 2020-06-06 22:35  爱十三的柒  阅读(1592)  评论(0编辑  收藏  举报