您的位置:首页 > 数据库

SQL Server 约束

2017-10-08 22:37 267 查看
基本表的完整性约束分为列级约束条件和表级约束条件。

列级约束条件
        列级约束条件是对某一个特定列的约束,包含在列定义中,可以直接跟在该列的其他定义之后,用空格分隔,不用指定列名。

表级约束条件

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

1.  主键约束

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

--列级约束
-- [ CONSTRAINT <约束名>] PRIMARY KEY
CREATE 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 <约束名>] UNIQUE
CREATE 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)
)


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SQL Server 约束