数据库中数据完整性的约束概述及其重要性

需积分: 0 0 下载量 8 浏览量 更新于2024-01-14 收藏 979KB PDF 举报
第13章_约束1;第13章_约束讲师:尚硅谷-宋红康(江湖人称:康师傅)1. 约束(constraint)概述1.1 为什么需要约束数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。从以下四个方面考虑:实体完整性(Entity Integrity) :例如,同一个表中,不能存在两条完全相同无法区分的记录域完整性(Domain Integrity) :例如:年龄范围0-120,性别范围“男/女”引用完整性(Referential Integrity) :例如:员工所在部门,在部门表中要能找到这个部门用户自定义完整性(User-defined Integrity) :例如:用户名唯一、密码不能为空等,本部门经理的工资不得高于本部门职工的平均工资的5倍。1.2 什么是约束 约束是表级的强制规定。可以在创建表时规定约束(通过;")约束对数据的操作进行限制,当违反约束条件时,数据库会拒绝或者自动处理这些操作,以确保数据的完整性。常见的数据库约束类型有:主键约束、唯一约束、非空约束、外键约束和检查约束。1.3 约束的优缺点约束的优点在于确保数据的一致性和完整性。由于约束的存在,可以有效地防止错误的数据插入或者更新到数据库中,提高了数据的质量。此外,约束还可以简化开发人员的工作,因为数据库会自动处理与约束相冲突的操作,减少了手动处理错误的工作量。而约束的缺点在于可能会增加数据库的负担。由于数据库需要检查并强制执行约束条件,可能会降低数据库的性能。此外,一些约束条件可能会限制某些特殊的操作,对于一些特殊需求的业务逻辑可能有一定的限制。2. 主键约束主键约束是用来保证表中的每条记录都能被唯一标识的约束。主键可以是单个字段,也可以是多个字段的组合。主键约束有以下特点:2.1 唯一性 主键值不能重复,每条记录的主键值必须唯一。2.2 非空 主键字段不能为空,不能为null。2.3 一条记录只能有一个主键值 一个表中的每条记录只能有一个主键值。2.4 主键类型可以是任意数据类型 主键字段的数据类型可以是整数、字符、日期等任意数据类型。2.5 主键约束可以通过创建表时指定,也可以通过修改表结构时添加。如果创建表时没有指定主键约束,则可以通过修改表结构时添加主键约束。3. 唯一约束唯一约束是用来保证表中的某个字段的取值不重复的约束。唯一约束有以下特点:3.1 唯一性 唯一约束的字段的取值不能重复,每条记录的这个字段的值必须唯一。3.2 可以为空 唯一约束的字段可以为空,允许为null值。3.3 可以有多个字段的唯一约束 唯一约束可以包含一个或多个字段的组合,保证这个组合字段的取值不重复。3.4 唯一约束可以通过创建表时指定,也可以通过修改表结构时添加。如果创建表时没有指定唯一约束,则可以通过修改表结构时添加唯一约束。4. 非空约束非空约束是用来保证表中的某个字段不能为空的约束。非空约束有以下特点:4.1 非空 约束的字段不能为空,不能为null值。4.2 非空约束可以通过创建表时指定,也可以通过修改表结构时添加。如果创建表时没有指定非空约束,则可以通过修改表结构时添加非空约束。5. 外键约束外键约束是用来保证表与表之间的关系的约束。外键值是另一个表中的主键值,用来建立表与表之间的关联关系。外键约束有以下特点:5.1 引用关系 外键约束的字段的值必须存在于另一个表的主键字段的值中,确保引用的数据正确和完整。5.2 外键约束可以为空 外键约束的字段可以为空,允许为null值。5.3 外键约束可以通过创建表时指定,也可以通过修改表结构时添加。如果创建表时没有指定外键约束,则可以通过修改表结构时添加外键约束。6. 检查约束检查约束是用来保证表中的某个字段的取值在符合特定条件的范围内的约束。检查约束有以下特点:6.1 限定范围 检查约束可以指定一个或多个条件,确保字段的取值在符合这些条件的范围内。6.2 检查约束可以通过创建表时指定,也可以通过修改表结构时添加。如果创建表时没有指定检查约束,则可以通过修改表结构时添加检查约束。7. 总结 约束是关系型数据库中用于保证数据完整性的重要机制。通过约束,可以限制表中数据的插入、更新和删除操作,确保数据的一致性和完整性。常见的约束类型有主键约束、唯一约束、非空约束、外键约束和检查约束。每种约束都有不同的特点和作用,可以根据实际需求来选择适合的约束类型。尽管约束可能会增加数据库的负担,但它们对于提高数据质量和简化开发人员工作的重要性不容忽视。
2022-08-08 上传