MySQL之完整性约束
作为数据库的一种数据模型,关系模型提供了一组完整性规则或限制。完整性约束用于确定关系数据库里数据的准确性和一致性。
在关系型数据库
我们知道,一种数据模型必须包含三个基本的部分: 作为数据库的一种数据模型,关系模型提供了一组完整性规则或限制。完整性约束用于确定关系数据库里数据的准确性和一致性。 在关系型数据库里,完整性约束包括域完整性、实体完整性、引用完整性以及用户定义完整性。 一、完整性约束的概念 1.1 域完整性 域完整性,是指给定列的取值范围(即输入的有效性),比如性别取值应为男或女。 强制域有效性的方法有:限制类型(通过数据类型)、格式(通过 CHECK 约束和规则)或可能值的范围(通过 FOREIGN KEY 约束、CHECK 约束、DEFAULT 定义、NOT NULL 定义和规则)。 1.2 实体完整性 实体完整性,是指使用主键来唯一地标识一个实体。 在关系数据库中,一条记录代表一个实体。而实体是可以相互区分、识别的,也即它们应具有某种唯一性标识(该标识不能取相同的值,也不能为空)。 实体完整性强制表的标识符列或主键的完整性(通过索引、UNIQUE 约束、PRIMARY KEY 约束或 IDENTITY 属性)。 1.3 引用完整性 引用完整性,就是定义外键与主键之间的引用规则。 假设有两个关系:
其中classID 是关系Student 的外键,它引用了关系Class 里的classID 。这个外键确保了关系Student 里的每个classID 都在关系Class 中有对应的classID 。在输入或删除记录时,引用完整性保持表之间已定义的关系: 引用完整性基于外键与主键之间或外键与唯一键之间的关系(通过 FOREIGN KEY 和 CHECK 约束)。引用完整性确保键值在所有表中一致。这样的一致性要求不能引用不存在的值,如果键值更改了,那么在整个数据库中,对该键值的所有引用要进行一致的更改。 1.4 用户定义完整性 用户定义完整性让用户可以定义不属于其它任何完整性分类的特定业务规则。所有的完整性类型都支持用户定义完整性(CREATE TABLE 中的所有列级和表级约束、存储过程和触发器)。 二、MySQL中的约束 不同的数据库产品对完整性约束的支持程度不一样,但基本的完整性约束都是支持的。相信以后会越来越完善。 2.1 主键约束 主键,又称主码,是表中一列或多列的组合,能够唯一地标识表中的一条记录。主键约束(Primary Key Constraint)要求主键列的数据唯一,且不允许为空。 在创建表的过程中添加一个字段的主键约束:
注意:AUTO_INCREMENT表示自增,默认初始值为1。 也可以使用多个字段的组合作为主键:
另外,也可以在建表之后使用ALTER添加主键约束:
2.2 唯一性约束 唯一性约束(Unique Constraint)要求表里某个字段的值在每条记录里都是唯一的,这一点与主键类似。声明为UNIQUE的字段允许为空,但只能出现一个空值。
2.3 外键约束 外键(Foreign Key):首先它是表中的一个字段,它可以不是本表的主键,但必须对应另外一个表的主键。外键可以为空值Mssq数据完整性约束,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。 外键约束是确保表与表之间引用完整性的主要机制。一个表可以有一个或多个外键。通常,我们把外键所在的表称为子表,外键所引用的表称为父表。
或者
2.4 非空约束 非空约束(Not Null Constraint)指字段的值不能为空。对于使用了 NOT NULL 约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错。
添加非空约束:
取消非空,并添加默认值:
2.5 检查约束 检查约束(Check Constraint)用于检查输入到特定字段的数据的有效性。MySQL不支持check约束,但可以使用check约束,而没有任何效果。
上面 check 约束要求 age 必须大于18,但插入数据时却没有起到任何作用。 (编辑:海南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |