数据完整性
是指存储在数据库中的数据,应该是保持一致性和可靠性
关系模型允许定义三类数据约束,他们是 实体完整性、参照完整性以及用户定义的完整性约束,其中前两种完整性约束由关系数据库系统自动支持
实体完整性:实体就是现实世界中的某个对象,RDBMS中一行代表一个实体。实体完整性就是保证每个实体都能被区别
例如:用户信息不完整。缺少数据
域完整性:域完整性主要是对列的输入有要求,通过限制列的数据类型、格式或值得方式来实现
参照完整性:主要是表与表直接的关系,可以通过外键来实现
用户自定义完整性:借助存储过程和触发器实现
实体完整性:
要求每张表都有唯一标识符,每张表中的主键字段不能为空且不能重复
约束方法:唯一性约束、主键约束、标识列
域完整性:
针对某一具体关系数据库的约束条件,它保证某些列不能输入无效的值。
域完整性是指列的值域的完整性,如数据类型、格式、值域范围、是否允许空值等。
约束方法:限制数据类型、检查约束、默认值、非空约束
参照完整性:
要求关系中不允许引用不存在的实体。
约束方法:外键约束 (外键:一般来说是其他表的主键)
用户自定义完整性:
针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的要求。
约束方法:规则、存储过程、触发器
唯一性约束: unique关键字,实现唯一性约束,保证实体完整性。一个表中可以有多个unique约束
外键(FOREIGN KEY)约束定义了表之间的一致性关系,用于强制参照完整性。
外键约束定义了对同一个表或其他表的列的引用,这些列具有PRIMARY KEY或UNIQUE约束。
####################################################################
实例:
create table person(
id int not null auto_increment primary key comment ‘主键id’,
name varchar(30) comment ‘姓名’,
id_number varchar(18) unique comment ‘身份证号’
);
这时插入身份证号相同的数据,系统会报错:
mysql> insert into person (name,id_number)value(“张三”,201901);
Query OK, 1 row affected (0.02 sec)
mysql> insert into person (name,id_number)value(“李四”,201901);
ERROR 1062 (23000): Duplicate entry ‘201901’ for key 'id_number
外键约束:
主表:
create table stu(
stu_no int not null primary key comment ‘学号’,
stu_name varchar(30) comment ‘姓名’
);
成绩表:
create table sc(
id int not null auto_increment primary key comment ‘主键id’,
stu_no int not null comment ‘学号’,
course varchar(30) comment ‘课程’,
grade int comment ‘成绩’,
foreign key(stu_no) references stu(stu_no)
);
在插入成绩表中的数据时,要求学号要在主表中存在。