SQL Server 约束
2017-10-08 22:37
267 查看
基本表的完整性约束分为列级约束条件和表级约束条件。
列级约束条件
列级约束条件是对某一个特定列的约束,包含在列定义中,可以直接跟在该列的其他定义之后,用空格分隔,不用指定列名。
表级约束条件
表级约束条件与列定义相互独立,不包括在列定义中,通常用于对两个或两个以上的列一起进行约束。
基本语法格式:
[ CONSTRAINT <约束名> ] < 约束类型 >
约束名是用户自定义的的名称,同一个数据库的约束名不能重复。如果用户在定义约束条件时没有指定约束名,数据库系统会给定一个不重名的约束名。
1. 主键约束
在表中定义一个主键值,用来唯一确定表中的每一条记录。每个表中只能有一个PRIMARY KEY 约束,并且主键约束的列不能为空值。如果主键约束定 义不止在一列上,则一列中的值可以重复,但在主键约束中,所有列的组合必须唯一。
一个基本表只能定义一个 PRIMARY KEY 约束,但可定义多个 UNIQUE 约束。
对于指定为 PRIMARY KEY 是一个列或多个列的组合,其中任何一个列都不能为空值;对于 UNIQUE 所约束的唯一码,则允许空值,但只能有一个空值。
不能为同一个列或一组列既定义 PRIMARY KEY 约束,又定义 UNIQUE 约束。
2. 唯一性约束( UNIQUE )
唯一性约束确保在非主键列中不输入重复的值,用于指定一个或多个列的组合具有唯一性。
使用唯一性约束的字段允许空值,但是当和参与UNIQUE约束的任何值一起使用时,每列只允许一个空值。
一个表中允许有多个唯一性约束。
可以把唯一性约束定义在多个字段上。
唯一性约束用于强制在指定字段上创建一个唯一性索引。
默认情况下,创建的索引为非聚集索引。
UNIQUE 即可用于列索引,也可用于表索引。
3. 检查约束
对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。检查约束通过数据的逻辑表达式确定有效值。
一个列级检查约束只能与限制的字段有关,一个表级检查约束只能与限制的表中字段有关。
一个表中可以定义多个检查约束。
每个CREATETABLE 语句中的每个字段只能定义一个检查约束。
在多个字段上定义检查约束,则必须将检查约束定义为表级约束。
当执行INSERT 语句或UPDATE 语句时,检查约束将验证手机。
检查约束中不能包含子查询。
4. 默认约束
默认约束指定在输入操作中如果没有提供输入值时,系统自动指定插入值,即使该值是空值。比如默认密码。
每个字段只能定义一个默认约束。
如果定义的默认值长于其对应字段的允许长度,则输入到表中的默认值将被截断。
不能加入到带有IDENTITY属性或者数据类型为timestamp的字段上。
如果字段定义为用户定义的数据类型,而且有一个默认绑定到这个数据类型上,则该字段不允许有默认值。
5. 外键约束
外键约束提供了字段参照完整性。
外键从句中的字段数目和每个字段指定的数据类型都必须和REFERENCES从句中的字段相匹配。
外键约束不能自动创建索引,需要用户手动创建。
用户想要改变外键约束的数据,必须只使用REFERENCES从句,不能使用外键子句。
一个表中最多可以有31个外键。
在临时表中,不能使用外键约束。
主键和外键的数据类型必须严格匹配。
6.NULL / NOT NULL 约束
判断是否允许该字段的值取取NULL值。
只能用于定义列约束,如果某个列没有指定NULL/ NOT NULL约束时,默认为NULL。
NULL值不是0,也不是空白,更不是填入字符串“NULL”,不是表示“不知道”、“不确定”或“没有数据”的意思,不占据任何存储空间。
当某一字段的值一定要输入才有意义的时候,该字段可设置为“ NOT NULL ”。
列级约束条件
列级约束条件是对某一个特定列的约束,包含在列定义中,可以直接跟在该列的其他定义之后,用空格分隔,不用指定列名。
表级约束条件
表级约束条件与列定义相互独立,不包括在列定义中,通常用于对两个或两个以上的列一起进行约束。
基本语法格式:
[ 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 2005中的约束
- sql server 约束 查找
- SQL Server查看表的约束
- 1 - SQL Server 2008 之 使用SQL语句创建具有约束条件的表
- sql server增加及删除约束的方法
- SQL Server中的约束条件
- SQL Server 创建约束图解(唯一 主键)
- SQL Server查询外键约束与删除外键约束
- SQL Server创建数据库和数据表的相关约束实现方法
- sql server 2008 数据库的完整性约束
- SQL Server 建库,表,约束(一)
- 重命名Sql Server所有外键约束名的方法
- sql server中的外键约束
- SQL Server修改已有字段类型,并添加默认约束
- SQL Server中,给字段设置约束,设置默认值注意事项
- SQL Server 删除表的默认值约束
- SQL Server(第一章) 创建表 删除表 创建主键约束、唯一约束、外键约束、CHECK约束、默认约束
- SQL Server 约束 修改表
- 无规矩不成方圆——SQL Server 约束
- 点滴积累【SQL Server】---SQL语句操作约束