在设计数据库时,为了确保数据库表中数据的质量,需要考虑数据的完整性(数据的完整性是指数据的正确性和一致性)。举个例子:当你要为学生建立一个基本信息表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),列约束作为列定义的一部分只作用于此列本身,表约束作为表定义的一部分可以作用于多个列。约束只是数据库对表管理的一种,这些在以前学过,但是不太会用,所以对约束先做一个小结。