数据库完整性
确保输入至数据库中的数据,是准确、有效及一致的。数据库中任何数据改动,都必须乎合所有完整性限制及数据有效性检验。
一 数据完整性
数据完整性(Data Integrity)是指数据的精确(Accuracy)和可靠性(Reliability)。
分类:
(1) 实体完整性:规定表的每一行在表中是唯一的实体
(2) 域完整性:指表中的列必须满足某种特定的数据类型约束,包括取值范围,精度等
(3) 参照完整性:指两个表的主键和外键的数据应一致,保证了表之间的数据一致性,防止数据丢失或无意义的数据在数据库中扩散。
二 完整性约束
功能:实现一些业务规则,防止无效的垃圾数据进入数据库,维护数据库的完整性(完整性指正确性与一致性)。从而使数据库的开发和维护都更加容易
(一)分类
(1) 与表有关的约束:是表中定义的一种约束。可在列定义时定义该约束,此时称为列约束,也可以在表定义时定义约束,此时称为表约束。(not null除外,not null只能用于定义列约束)
共5种 非空(NOT NULL)约束、 唯一(UNIQUE)约束、主键(PRIMARY KEY)约束、外键 (FOREIGN KEY)约束、条件 (CHECK)约束
- 非空(NOT NULL)约束:所约束的列不能为NULL值,否则就会报错。只用于定义列约束。
- 唯一(UNIQUE)约束:在表中每一行中所定义的这列或这些列的值都不能相同。必须保证唯一性。否则就会违法约束条件。
- 主键(PRIMARY KEY)约束:唯一的标识表中的每一行,不能重复,不能为空。 创建主键或唯一约束后,ORACLE会自动创建一个与约束同名的索引(UNIQUENES为UNIQUE唯一索引)。需要注意的是:每个表只能有且有一个主键约束。
- 外键(FOREIGN KEY)约束:用来维护从表(Child Table)和主表(Parent Table)之间的引用完整性. 外键约束是个有争议性的约束,它一方面能够维护数据库的数据一致性,数据的完整性。防止错误的垃圾数据入库; 另外一方面它会增加表插入、更新等SQL性能的额外开销,不少系统里面通过业务逻辑控制来取消外键约束。例如在数据仓库中,就推荐禁用外键约束。
- 条件(CHECK)约束:表中每行都要满足该约束条件。条件约束既可以在表一级定义也可以在列一级定义。在一列上可以定义任意多个条件约束。
(二)管理
(1)创建
语法:
- not null: 只用于定义列约束
Colunm_name datatype | domain not null - unique
Colunm_name datatype | domain unique - primary key
Colunm_name datatype | domain primary key:定义列约束
或 primary key(Colunm_name):定义表约束 - foreign keyColunm_name datetype | domain references table_name(column)[match full|partial|simple] //注:sqlserver不支持。[referential triggered action]说明:table_name为父表的表名,column为父表中与外键对应的主键值。[match full|partial|simple]为可选子句,用于设置如何处理外键中的null值。[referential triggered action]也为可选子句,用于设置更新、删除外键列时的操作准则。
可以为表的一列或多列创建foreign key 约束,如果为多列创建 foreign key约束,将分别与主表中的相应主键相对应。
(注:foreign key 列上的取值可以取null)。 - check列定义语法:Column datetype | domain check(search condition)表约束语法:constraint constraint_name check(search condition)
参考资料: