约束定义
对于数据库来说,基本表的完整性约束分为列级约束条件和表级约束条件:
列级约束条件
列级约束条件是对某一个特定列的约束,包含在列定义中,可以直接跟在该列的其他定义之后,用空格分隔,不用指定列名。
表级约束条件
表级约束条件与列定义相互独立,不包括在列定义中,通常用于对两个或两个以上的列一起进行约束。
约束介绍
在数据库管理系统中,保证数据库中的数据完整性是非常重要的。所谓数据完整性,就是指存储在数据库中数据的一致性和正确性。约束定义关于列中允许值的规则,是强制完整性的标准机制。使用约束优先于使用触发器、规则和默认值。查询优化器也使用约束定义生成高性能的查询执行计划。
数据完整性分类
在sql server中,根据数据完整新措施所作用的数据库对象和范围不同,可以将数据完整性分为以下几种:
实体完整性
实体完整性简单的说,就是将表中的每一行看作一个实体。实体完整性要求表的标示符列或主键的完整性。可以通过建立唯一索引、primary key约束、unique约束,以及列的identity属性来实施实体完整性。
域完整性
域完整性是指给定列的输入有效性。要求表中指定列的数据具有正确的数据类型、格式和有效的数据范围。强制域有效性的方法有:限制类型(通过数据类型)、格式(通过 check 约束和规则)或可能值的范围。域完整性通过 foreign key 约束、check 约束、default 定义、not null 定义和规则来实现。
引用完整性
引用完整性又称参照完整性。引用完整性维持被参照表和参照表之间的数据一致性,它通过主键(primary key)约束和外键(foreign key)约束来实现。引用完整性确保键值在所有表中一致。这样的一致性要求不能引用不存在的值,如果键值更改了,那么在整个数据库中,对该键值的所有引用要进行一致的更改。在被参照表中,当其主键值被其它表所参照时,该行不能被删除也不允许改变。在参照表中,不允许参照不存在的主键值。
约束分类
sqlserver中有五种约束类型,分别是 primary key约束、foreign key约束、unique约束、default约束、和check约束。查看或者创建约束都要使用到 microsoft sql server managment studio。
primary key约束
在表中常有一列或多列的组合,其值能唯一标识表中的每一行,这样的一列或多列成为表的主键(primarykey)。
一个表只能有一个主键,而且主键约束中的列不能为空值。
只有主键列才能被作为其他表的外键所创建。
foreign key约束
外键约束是用来加强两个表(主表和从表)的一列或多列数据之间的连接的。
创建外键约束的顺序是先定义主表的主键,再对从表定义外键约束。
只有主表的主键才能被从表用来作为外键使用,被约束的从表中的列可以不是主键,主表限制了从表更新和插入的操作。
unique约束
唯一约束确保表中的一列数据没有相同的值。
与主键约束类似,唯一约束也强制唯一性,但唯一约束用于非主键的一列或者多列的组合,且一个表可以定义多个唯一约束。
default约束
若在表中定义了默认值约束,用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列,如果我们不设置默认值,系统默认为null。
check 约束用于限制列中的值的范围。
check约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围,在列中更新数据时,所要输入的内容必须满足check约束的条件,否则将无法正确输入。
如果对单个列定义 check 约束,那么该列只允许特定的值。
如果对一个表定义 check 约束,那么此约束会在特定的列中对值进行限制。
约束优缺点
优点:
1、保持数据库完整性。
2、保证列中数据的唯一性。
3、插入、更新、删除时严格的范围校验机制。
4、快速。
5、可以引用其他列。
6、在命令执行前发生。
7、遵循ansi标准。
缺点:
1、插入、更新、删除时需要校验规则比较麻烦。
2、必须对每个表重新定义。
3、不能引用其他表。
4、不能绑定到数据类型。