(5) 数据的完整性

在实际开发中,数据表中的数据是非常多的,保证数据的准确是至关重要的。MySQL提供了数据的完整性约束,主要包括实体完整性,域完整性和引用完整性。

5.1 实体完整性

实体完整性是对关系中的记录进行约束,即对行的约束。此处主要讲解主键约束、唯一约束和自动增长列。

1. 主键约束

主键(primary key) 用于唯一地标识表中的某一条记录。在两个表的关系中,主键用来在一个表中引用来自于另一个表中的特定记录。一个表的主键可以由多个关键字共同组成,并且主键的列不能包含空值。主键的值能唯一标识表中的每一行,这就好比所有人都有身份证,每个人的身份证号是不同的,能唯一标识每一个人。
为已经存在的表设置主键的语法格式如下。
alter table 表名 add primary key(列名);
在创建表时同样可以添加主键约束,具体语法格式如下。
create table 表名{ 字段名 数据类型 primary key };
在以上语法格式中,字段名表示需要设置为主键的列名,数据类型为该列的数据类型,primary key 代表主键。
添加多字段的主键约束的语法格式如下。
create table 表名{ 字段名1 数据类型, 字段名2 数据类型, ... primary key(字段名1,字段名2,字段名n) };

2. 唯一约束

唯一约束用于保证数据表中字段值的唯一性,在MySQL中使用unique关键字添加唯一约束。在创建表时为某个字段添加唯一约束的具体语法格式如下。
create table 表名{ 字段名 数据类型 unique, ... };
在以上语法格式中,字段名表示需要添加唯一约束的列名,列名后跟着数据类型和unique关键字,两者之间用空格隔开。
同样,唯一约束也可以添加到已经创建完成的表中,语法格式如下。
alter table 表名 add unique(列名);

3. 自动增长列

在创建表时将某个字段的值设置为自动增长,语法格式如下。
create table 表名( 字段名 数据类型 auto_increment, ... );
在以上语法格式中,字段名表示需要设置字段值自动增加的列名,列名后跟着数据类型和auto_increment关键字,两者之间用空格隔开。
也可以为已经创建完成的表字段设置自动增长列,语法格式如下。
alter table 表名 modify 字段名 数据类型 primary key auto_increment;

5.2 索引

在关系数据表中,索引是一种单独的、物理的对数据表中一列或多列的值进行排序的存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书馆的目录,用户可以根据目录中的页码快速找到所需的内容。MySQL中的索引分为很多种,包括普通索引、唯一索引、全文索引、单列索引、多列索引、空间索引、组合索引等。

1. 普通索引

普通索引是最基本的索引类型,它的唯一任务是加快对数据的访问速度,因此应该只为那些最经常出现在查询条件或排序条件中的数据列创建索引,尽可能选择一个数据最整齐、最紧凑的数据列来创建索引,例如一个整数数据类型的列。
在创建表时可以创建普通索引,语法格式如下。
create table 表名( 字段名 数据类型, ... index [索引名](字段名[(长度)]) );
在以上语法格式中,index表示字段的索引,索引名是可选值,括号中的字段名是创建索引的字段,参数长度是可选的,用于表示索引的长度。
对于已经创建完成的表,也可以为其某个字段创建普通索引,语法格式如下。
create index 索引名 on 表名(字段名[(长度)]);

2. 唯一索引

普通索引允许被索引的数据列包含重复的值,例如姓名可能出现重复的情况,但有些值是不能重复的,在为这个数据列创建索引的时候就应该用unique关键字把它定义为一个唯一索引。唯一索引可以保证数据记录的唯一性,这种做法的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此变得更有效率;二是MySQL会在有新记录插入数据表时自动检查新记录的这个字段的值是否已经在某个记录的这个字段中出现,如果已经出现,MySQL将拒绝插入那条新记录。
在创建表时可以创建唯一索引,语法格式如下。
create table 表名( 字段名 数据类型, ... unique index [索引名](字段名[(长度)]) );
在以上语法格式中,unique index关键字表示唯一索引,索引名是可选值,括号中的字段名是创建索引的字段,参数长度是可选的,用于表示索引的长度。
对于已经创建完成的表,也可以为其某个字段创建唯一索引,语法格式如下。
create unique index 索引名 on 表名(字段名[(长度)]);

5.3 域完整性

域完整性是对关系中的单元格进行约束,域代表单元格,也就是对列的约束。域完整性约束包括数据类型、非空约束、默认值约束和CHECK约束,MySQL会忽略check约束,因此本节只讲解非空约束和默认值约束。

1. 非空约束

非空约束用于保证数据表中某个字段的值不为NULL,在MySQL中使用not null关键字添加非空约束。在创建表时,为某个字段添加非空约束的具体语法格式如下。
create table 表名( 字段名 数据类型 not null, ... );
此外,非空约束也可以添加到已经创建完成的表中,语法格式如下。
alter table 表名 modify 字段名 数据类型 not null;

2. 默认值约束

默认值约束用于为数据表中某个字段的值添加默认值。在MySQL中使用default关键字添加默认值约束,为某个字段添加默认值约束的具体语法格式如下。
create table 表名( 字段名 数据类型 default 默认值, ... );
将默认值约束添加到已经创建完成的表中,语法格式如下。
alter table 表名 modify 字段名 数据类型 default 默认值;

5.4 引用完整性

引用完整性是对实体之间关系的描述,是定义外关键字与主关键字之间的引用规则,也就是外键约束。如果是要删除被引用的对象,那么也要删除引用它的所有对象,或者把引用值设置为空。

1. 外键的概念

外键是引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一约束。外键用于建立和加强两个表数据之间的连接。

2. 添加外键约束

若想真正连接两个表的数据,就需要为表添加外键约束,语法格式如下。
alter table 表名 add foreign key(外键字段名) references 主表表名(主键字段名);
用户除了可以在创建表后添加外键约束以外,还可以在创建的同时添加外键约束,语法格式如下。
create table 表名( 字段名 数据类型, ..., foreign key(外键字段名) references 主表表名(主键字段名) );

3. 删除外键约束

语法格式如下。
alter table 表名 drop foreign key 外键名;

猜你喜欢

转载自www.cnblogs.com/adtxl/p/11252942.html