~ MySQL 数据完整性
数据完整性,是指数据的准确性和一致性。如,学生的学号必须唯一、性别只能是男或女。
数据完整性,主要包括 4 种类型:
- 域完整性:对字段(列)的约束,如数据类型、默认值约束、非空约束
- 实体完整性:对记录(行)的约束,如主键约束、唯一值约束
- 引用完整性:在输入和删除记录时,引用完整性保持表之间已定义的关系。如外键约束
- 自定义完整性:用户自己定义的业务规则,如使用触发器实现自定义业务规则
数据库的数据完整性,关系到数据库系统能否真实的反映现实世界。因此,数据库是否具备数据完整性是非常重要的。
MySQL 提供了字段约束机制以保证数据的完整性,以下是一些常用的字段约束:
- 默认值约束(default):赋予某个字段默认值,如果没有输入数据,则值就是默认值。
- 外键约束(foreign key):用于建立表与表之间的关系,需要指定从表作为外键的字段引用主表的主键。需要注意的是,存储引擎:InnoDB 支持外键,外键关联的表要求都是 InnoDB 类型的表。
- 主键约束(primary key):设置该字段为表的主键,作为该表数据记录的唯一标识。
- 唯一值约束(unique):设置该字段的值是唯一的;允许为空,但只能有一个空值。
- 非空约束(not null):对不允许为空的字段进行设置。
- 自动增长约束(auto_increment):设置该字段自动增长,默认每条自增 1;通常用于设置主键,且为整数类型;可以设置初始值和步长。
[ 实现方式 ] 简单来说,为了对各字段的数据做进一步的确定,可以通过对字段设置字段约束来实现数据完整性:
完整性类型: //
MySQL 不支持 check 约束, 虽然可以在列上添加 check 约束,但不起作用域 ——> 约束类型:default(默认值约束)、
check(检查约束)、foreign key(外键约束)实体 ——> primary key(主键约束)、unique(唯一值约束)
参照 ——> foreign key(外键约束)
域完整性
- 默认值约束
添加默认值约束
# 方式一:在创建表时,在字段后面直接添加默认值约束 create table book( book_id int primary key auto_increment, book_name varchar(50) default 'JAVA编程' ); # 方式二:在表创建完成后,通过修改表结构添加默认值约束 create table book( book_id int primary key auto_increment, book_name varchar(50) ); # 添加默认值约束 alter table book modify book_name varchar(50) default 'JAVA编程';删除默认值约束
alter table book modify book_name varchar(50) default null;
- 非空约束
添加非空约束
# 方式一:在创建表时,在字段后面直接添加非空约束 create table book( book_id int primary key, book_name varchar(50) not null ); # 方式二:在表创建完成后,通过修改表结构添加非空约束 create table book( book_id int primary key, book_name varchar(50) ); # 添加默认值约束 alter table book modify book_name varchar(50) not null;删除非空约束
alter table book modify book_name varchar(50);
实体完整性
- 主键约束 primary key
添加(
复合)主键约束# 方式一:创建一张表,并直接给字段添加主键约束 create table book( book_id int primary key, # 在字段后面直接添加主键约束 book_name varchar(50), book_price double ); # 方式二:创建一张表,不在字段后面添加约束,而是在表的约束区域添加主键约束 create table book( book_id int, boot_name varchar(50), book_price double, # 在表的约束区域添加主键约束 constraint pk_book_id primary key(book_id) # 说明:字段列表需要使用小括号,如果有多字段需要使用逗号分隔;声明两个以上字段为主键,我们称之为复合主键。 ); # 方式三:创建一张表,不写主键;而是在表创建完成后,通过修改表结构给某个字段添加主键约束 create table book( book_id int, book_name varchar(50), book_price double ); # 在表创建完成后,给某个字段添加主键约束 alter table book add constraint pk_book_id primary key(book_id);删除主键约束
alter table book drop primary key;
- 自动增长约束
添加自动增长约束
# 方式一:在创建表的同时,在字段后面添加自动增长约束 -- create table book( -- book_id int primary key auto_increment, -- book_name varchar(50), -- book_price double -- ); # 插入数据 -- insert into book (book_name,book_price) values('书名1',9.9),('书名2',19.9); # 方式二:在表创建完成后,添加自动增长约束 create table book( book_id int primary key, book_name varchar(50), book_price double ); # 为现有的表指定自增列 alter table book modify book_id int primary key auto_increment;删除自动增长约束
alter table book modify book_id int primary key;另,auto_increment 默认的开始值是 1,如果希望修改初始值,可以使用:
alter table book auto_increment=10;
- 唯一值约束
添加唯一值约束
# 方式一:创建一张表,并直接给字段添加唯一值约束 create table book( book_id int unique, # 在字段后面直接添加唯一值约束 book_name varchar(50), book_price double ); # 方式二:创建一张表,不在字段后面添加约束,而是在表的约束区域添加唯一值约束 create table book( book_id int, boot_name varchar(50), book_price double, # 在表的约束区域添加唯一值约束 constraint unique_book_id unique(book_id) ); # 方式三:创建一张表,然后,在表创建完成后,通过修改表结构给某个字段添加唯一值约束 create table book( book_id int, book_name varchar(50), book_price double ); # 在表创建完成后,给某个字段添加唯一值约束 alter table book add constraint unique_book_id unique(book_id);删除唯一值约束
alter table book drop index unique_book_id;
参照完整性
MySQL 参照完整性,一般是通过外键 foreign key 来实现的;外键仅 InnoDB 支持。
外键声明,需要指定从表作为外键的字段引用主表的主键;在删除主表时,必须删除引用关系或删除从表。
外键(foreign key)基本操作可以查看:《 MySQL 多表(外键)操作与多表查询 》。