在设计数据库时。为了确保数据库表中数据的质量。须要考虑数据的完整性(数据的完整性是指数据的正确性和一致性)。
举个样例:当你要为学生建立一个基本信息表StudentInfo时,这个表中学生的名字能够同样可是学号必须不一样,而他的年龄也得限制在一定范围内,像这样类似的“限制”有非常多,假设违反了这些限制就制造了与现实不符的失真数据即破坏了数据的完整性。由于数据库不能自行推断哪些数据失真,所以须要觉得加入一些约束来保证数据的完整性。
数据库中对表的约束有五种:
1.主键约束(Primary Key constraint):主键列数据唯一。而且不同意为空。
语法:Constraint 主键约束名 Primary Key [ Clustered | Nonclustered ] ( 列名1,[ 列名2。……。列名n ] )
主键是表中的一列或一组列,它们的值能够唯一地标识表中的每一行。
2.唯一约束(Unique constraint):该列数据唯一,同意为空。但仅仅能出现一个空值(不反复性)。
语法:Constraint 约束名 Unique [ Clustered | Nonclustered ] ( 列名1。[ 列名2,…… 列名n] )
唯一性约束保证了除主键外的其他一个或一组列的数据具有唯一性。以防止在列中输入反复的值。
(一个表仅仅能够有一个主键约束。假设其他列也不希望有反复就能够使用唯一性约束。)
3.检查约束(Check constraint):范围限制、格式限制
语法:Constraint 约束名 Check [ Not For Replication ] ( 逻辑表达式 )
检查约束使指定表中一列或一组列能够接受的数据值或格式。
4.默认约束(Default constraint):
语法:Constraint 约束名 Default 约束表达式 [ For 列名 ]
为指定列定义一个默认值。在输入数据时。假设没有输入该列的值,则将该列的值设置为默认值。
5.外键约束(Foreign Key constraint):表间约束。确保数据的參照完整性
语法:Constraint 约束名 Foreign Key ( 列名1。[ 列名2,……列名n ] ) References 关联表 ( 关联列名1。[ 关联列名2,……关联列名n ] )
将当前表中的某一列或一组列关联到还有一个表的主键列。可创建两个表之间的连接。
当前表中的列就成为外键。
外键涉及到两个表,一个主表。一个从表 。主表中的外键是从表中的主键
以下以“学生信息”表为例。加入约束
Create table StudentInfo ( StudentNo int not null, StudentID int, StudentName nvarchar(50) , Sex varchar(2) , Score float Default(0), --为学生的成绩设定默认值0,在没有数据输入时。系统自己主动分配为0. DepartmentNo varchar(10), Constraint PK_Student Primary Key (StudentNo), --用“学号”作主键。仅仅要有学号就能够唯一确定一位学生 Constraint IX_Student Unique(StudentID), --'为“身份证”加入唯一性约束,当输入的身份证号有反复时会自己主动检查出错误 Constraint CK_Student Check (Sex In ('男','女')), --'检查学生的性别是否为男或女 --'“学生信息”表与“院系”表建立外键约束,外键为学生信息表的"所属院系",从表的主键或候选键列为“院系”表的“记录编号” Constraint FK_Student Foreign Key(DepartmentNo) References Department(RecordNo) )
约束的创建主要有两种,以加入主键为例:
(1)创建表的时候创建约束,即在CreateTable中定义约束
Create StudentInfo(StudentNo vchar Primary Key。……)
或者
Create StudentInfo(StudentNo vchar,……Constraint PK_Student Primary Key(StudentNo)……)
(2)是向已经创建 好的表中加入约束,即在Alter Table中创建约束
Alter Table StudentInfo add Constraint PK_Student Primary Key (StudentNo)
删除约束:对于存在外键约束的表,假设进行删除非空的外键,可能会出现错误
Alter Table StudentInfo Drop Constraint PK_Student
约束是SQL Server提供的自己主动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件。
对于数据库来说,约束也可分为列约束(Column Constraint)和表约束(Table Constraint)。列约束作为列定义的一部分仅仅作用于此列本身。表约束作为表定义的一部分能够作用于多个列。约束仅仅是数据库对表管理的一种,这些在曾经学过。可是不太会用,所以对约束先做一个小结。