zoukankan      html  css  js  c++  java
  • 六,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)
    )
  • 相关阅读:
    模拟测试69
    模拟测试68
    模拟测试66
    NOIP模拟测试15
    NOIP模拟测试14
    Gekoo's checker
    NOIP模拟测试13
    替罪羊树模板
    KDTree笔记
    NOIP模拟测试12
  • 原文地址:https://www.cnblogs.com/a-qi/p/13057158.html
Copyright © 2011-2022 走看看