SQL Server 约束

来源:互联网 发布:资金互助合作社软件 编辑:程序博客网 时间:2024/05/21 22:33

基本表的完整性约束分为列级约束条件和表级约束条件。

  • 列级约束条件
        列级约束条件是对某一个特定列的约束,包含在列定义中,可以直接跟在该列的其他定义之后,用空格分隔,不用指定列名。
  • 表级约束条件
        表级约束条件与列定义相互独立,不包括在列定义中,通常用于对两个或两个以上的列一起进行约束。
        基本语法格式:
        [ CONSTRAINT <约束名> ] < 约束类型 > 
        约束名是用户自定义的的名称,同一个数据库的约束名不能重复。如果用户在定义约束条件时没有指定约束名,数据库系统会给定一个不重名的约束名。

1.  主键约束

     在表中定义一个主键值,用来唯一确定表中的每一条记录。每个表中只能有一个PRIMARY KEY 约束,并且主键约束的列不能为空值。如果主键约束定      义不止在一列上,则一列中的值可以重复,但在主键约束中,所有列的组合必须唯一。

--列级约束-- [ CONSTRAINT <约束名>] PRIMARY KEYCREATE TABLE student(   ID INT PRIAMRY KEY , --主键   name VARCHAR(20) UNIQUE,     sex CHAR(1))
--表级约束--[ CONSTAINT <约束名>] PRIMARY KEY (<列名>[ {,列名} ])--定义一个课程表,由学号(ID),课程号(CID),分数构成。学号和课程号构成主键。CREATE TABLE course(   ID     INT NOT NULL,   CID    INT NOT NULL,   SCORE  INT,   CONSTRAINT C_PK PRIMARY KEY(ID,CID) )
    PRIMARY KEY 和 UNIQUE 的区别

  • 一个基本表只能定义一个 PRIMARY KEY 约束,但可定义多个 UNIQUE 约束。
  • 对于指定为 PRIMARY KEY 是一个列或多个列的组合,其中任何一个列都不能为空值;对于 UNIQUE 所约束的唯一码,则允许空值,但只能有一个空值。
  • 不能为同一个列或一组列既定义 PRIMARY KEY 约束,又定义 UNIQUE 约束。

2.   唯一性约束( UNIQUE )

      唯一性约束确保在非主键列中不输入重复的值,用于指定一个或多个列的组合具有唯一性。

  • 使用唯一性约束的字段允许空值,但是当和参与UNIQUE约束的任何值一起使用时,每列只允许一个空值。
  • 一个表中允许有多个唯一性约束。
  • 可以把唯一性约束定义在多个字段上。
  • 唯一性约束用于强制在指定字段上创建一个唯一性索引。
  • 默认情况下,创建的索引为非聚集索引
  • UNIQUE 即可用于列索引,也可用于表索引。
--UNIQUE 列级约束--[ CONSTRAINT <约束名>] UNIQUECREATE TABLE student(   ID INT NOT NULL,   name VARCHAR(20) UNIQUE,  --name 为唯一码   sex CHAR(1))
--UNIQUE 表级约束--[ CONSTRAINT 约束名>] NUIQUE (<列名> [ {,<列名>} ])CREATE TABLE student(   ID INT NOT NULL,   name VARCHAR(20) UNIQUE,     sex CHAR(1),   CONSTRAINT S_UNIQUE UNIQUE (name,sex)     --定义name 和 sex 为唯一码)

3.  检查约束

     对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。检查约束通过数据的逻辑表达式确定有效值。

  • 一个列级检查约束只能与限制的字段有关,一个表级检查约束只能与限制的表中字段有关。
  • 一个表中可以定义多个检查约束。
  • 每个CREATETABLE 语句中的每个字段只能定义一个检查约束。
  • 在多个字段上定义检查约束,则必须将检查约束定义为表级约束
  • 当执行INSERT 语句或UPDATE 语句时,检查约束将验证手机。
  • 检查约束中不能包含子查询。
--[ CONSTRAINT <约束名>] CHECK (<条件>)CREATE TABLE course(   ID     INT ,   CID    INT ,   SCORE  INT CHECK (SCORE >=0 AND SCORE <=100)  --SCORE 范围为 0-100)

4.  默认约束

     默认约束指定在输入操作中如果没有提供输入值时,系统自动指定插入值,即使该值是空值。比如默认密码。

  • 每个字段只能定义一个默认约束。
  • 如果定义的默认值长于其对应字段的允许长度,则输入到表中的默认值将被截断。
  • 不能加入到带有IDENTITY属性或者数据类型为timestamp的字段上。
  • 如果字段定义为用户定义的数据类型,而且有一个默认绑定到这个数据类型上,则该字段不允许有默认值。
CREATE TABLE course(   ID     INT ,   CID    INT ,   SCORE  INT DEFAULT 90  --默认90)

5.  外键约束

  • 外键约束提供了字段参照完整性。
  • 外键从句中的字段数目和每个字段指定的数据类型都必须和REFERENCES从句中的字段相匹配。
  • 外键约束不能自动创建索引,需要用户手动创建。
  • 用户想要改变外键约束的数据,必须只使用REFERENCES从句,不能使用外键子句
  • 一个表中最多可以有31个外键。
  • 在临时表中,不能使用外键约束。
  • 主键和外键的数据类型必须严格匹配。
--[ CNSTRAINT <约束名>] FOREIGN KEY (<外码>) REFERENCES <被参照关系名> (<列名>)--course 表,ID ,CID 为 course 的外码CREATE TABLE course(   ID  INT FOREIGN KEY (ID) REFERENCES student (ID),   CID INT FOREIGN KEY (CID) REFERENCES course (CID),   SCORE INT,   CONSTRAINT SC_PK PRIMARY KEY (ID,CID))
6.NULL / NOT NULL 约束
      判断是否允许该字段的值取取NULL值。
  • 只能用于定义列约束,如果某个列没有指定NULL/ NOT NULL约束时,默认为NULL。
  • NULL值不是0,也不是空白,更不是填入字符串“NULL”,不是表示“不知道”、“不确定”或“没有数据”的意思,不占据任何存储空间。
  • 当某一字段的值一定要输入才有意义的时候,该字段可设置为“ NOT NULL ”。
--[ CONSTRAINT <约束名>] [NULL | NOT NULL]CREATE TABLE student(    ID INT NOT NULL,    name VARCHAR(20),    sex    CHAR(1))




 

 

原创粉丝点击