数据库Mysql的数据完整性

数据完整性是为了保证插入到数据库中的数据是正确的,防止用户可能的错误输入。

数据完整性分为实体完整性、域完整性、参照完整性。

实体(行)完整性

(实体完整性中的实体指的是表中的行,因为一行记录对应一个实体)

实体完整性规定表的一行在表中是唯一的实体,不能出现重复。

实体完整性通过表的主键来实现。

主键关键字: primary key

主键特点: 不能为null,并且唯一。

主键分类:

​ 逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐)

​ 业务主键:例如username,参与实际的业务逻辑。

主键使用方式:

​ 方式一:

Create table t1(

​	  id int primary key,

​	  name varchar(100)

);

insert into t1 values(1,’zs’);

insert into t1 values(2,’ls’);

在这里插入图片描述
在这里插入图片描述

主键自动增长:

关键字: auto_increment

​		create table t4(

​			id int primary key auto_increment,

​			name varchar(100)

);

insert into t4(name) values(‘zs’);

insert into t4 values(null,’ls’);

在这里插入图片描述

域(列)完整性

指数据库表的列(即字段)必须符合某种特定的数据类型或约束

数据类型

​ 长度

​ 非空约束:not null

​ 唯一约束: unique

create table t5(

​			username varchar(100) not   null  unique,

​			gender varchar(100) not   null,

​			phonenum varchar(100)  unique

​	);

在这里插入图片描述
1.username 唯一 ,如果有重复就会出现错误:


 [Err] 1062 - Duplicate entry 'ls' for key 'username' 

2.如果第二次插入

insert into student3(username,gender,phone) VALUES('ls','男','112');

就会出现错误:

[Err] 1062 -关键字“用户名”的重复条目“ls”

3.gender 不能为 NULL,如果不输入就会出现错误:

Field 'gender' doesn't have a default value  

4.执行下面这条语句,

insert into student3(username,gender,phone) values('ll','男','113');

就会出现下面的错误

  • phone 唯一,错误 Duplicate entry ‘ll’ for key ‘username’
  • 关键字“用户名”的重复条目“ll”

在这里插入图片描述
在这里插入图片描述

参照完整性**

参照完整性指的就是多表之间的设计,主要使用外键约束。

多表设计: 一对多、多对多、一对一设计

一对多

1.客户和订单的关系就是一对多,一个客户可以有多张订单,一张订单属于一个客户;
在这里插入图片描述

​ 创建客户表:

create table  customers(

​	id int,

​	name varchar(100),

​	address varchar(255),

​	primary  key(id)

);

创建订单表:

create table orders(

​	order_num int primary key,

​	price float(8,2),

​	status int,

​	customer_id int,

constainct  customer_id_fk foreign  key(customer_id) references customers(id)

);

外键约束: constraint customer_id_fk foreign key(customer_id) references customers(id);

注: constraint: 约束的意思。foreign key: 外键。references: 参照

创建一个名叫customer_id_fk的外键约束,其中外键指的是customer_id,并且参照的是 customers表中的id列。

图形界面操作的过程是:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

子表的删除、更新策略

子表的删除更新策略一共有四种:

1)CASCADE 级联策略。使用此种策略时主表的记录被删除或者主键字段被修改时会同步删除或修改子表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2)NO ACTION 无动作策略。使用此种策略时要删除主表必须先删除子表,要删除主表的记录必须先删除子表关联的记录,不能更新主表主键字段的值。
在这里插入图片描述

3)RSTRICT 主表约束策略。此种策略对主表的约束跟 NO ACTION 一样

4)SET NO 置空策略。使用此种策略时,如果主表被删除或者主键被更改,则将子表中的外键设置为NULL。需要注意的是,如果子表的外键是主键或者是设置为NOT NULL的,则主表的删除和主键的更改跟 NO ACTION 一样。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多对多

老师和学生是多对多关系, 一个老师对应多个学生,一个学生被多个老师教

在这里插入图片描述
注意:

  1. 需要创建第三张表,并且公共的字段,可以放入到第三张表格中。
  2. 设置外键对应其他表格中的主键

创建老师表:

​	Create table teachers(

​		id int,

​		name varchar(100)

​		salary float(8,2),

​		primary key(id)

);

创建学生表:

Create table students(

​	id int,

​	name varchar(100),

​	grade varchar(100),

​	primary key(id)

);	

第三张表格:

Create table teacher_student(

​	t_id int,

​	s_id int,

​	primary key(t_id,s_id)

CONSTRAINT teacher_id_fk FOREIGN KEY(t_id) REFERENCES teachers(id),

CONSTRAINT student_id_fk FOREIGN KEY(s_id) REFERENCES students(id)

);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一对一

按照外键关联

1.在IdCard表中的外键添加唯一约束

在这里插入图片描述

按照主键关联,对主键添加外键约束
在这里插入图片描述

实际开发中直接设计一张表格就可以了。

注意:

  1. 一般情况,设计一张表格即可;
  2. 设计成两张表格:
    第二张表格中创建一个字段为外键(设置成唯一 unique)对应 第一张表格中的主键;

直接使用第二张表格中的主键为外键,对应第一张表格中的主键。

猜你喜欢

转载自blog.csdn.net/xmxt668/article/details/89174160