mySQL数据完整性

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

1.实体完整性

实体完整性中的实体指的是表中的行,因为一行记录对应一个实体
实体完整性规定表的一行在表中是唯一的实体,不能出现重复。
实体完整性通过表的主键来实现。
创建主键的两种方式:
(1)行内创建

	create TABLE customers(
		id int primary key,                --设置id是直接将其设置为主键
		name varchar(100),
		address varchar(255),  	
	   );

(2)行外设置

create TABLE customers(
	id int primary key,               
	name varchar(100),
	address varchar(255),  	
);
alter table customers add  primary key(id)           --在行外以添加字段的形式设置主键

2.域完整性

域完整性指数据库表的列必须符合某种特定的数据类型或约束,比如说数据类型,长度,非空约束,唯一约束等等
在这里插入图片描述
如图,图片中的类型,长度,小数点,不是null都是域完整性的表现

3.参照完整性

参照完整性指的就是多表之间的设计,主要使用外键约束。
常用的多表设计有:一对多,多对多,一对一
(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,
constraint customer_id_fk foreign key(customer_id) REFERENCES customers(id) --外键约束
// 在外键约束中 constraint代表约束,foreign key代表外键,references值目标表中的参照
//
);    

扩展:子表的删除,更新策略
在一对多表中,子表的删除,更新有四种,如图所式,分别是cascade(层叠级),no action(无动作),rstrict (主表约束),set no(置空策略),如图所示:
在这里插入图片描述
1)cascade 级联策略。使用此种策略时主表的记录被删除或者主键字段被修改 时会 同步删除或修改子表
2)no action 无动作策略。使用此种策略时要删除主表必须先删除子表,要删除 主表的记录 必须先删除子表关联的记录,不能更新主表主键字段的值。
3)RSTRICT 主表约束策略。此种策略对主表的约束跟 NO ACTION 一样
4)SET NO 置空策略。使用此种策略时,如果主表被删除或者主键被更改,则将子表中的外键设置为NULL。需要注意的是,如果子表的外键是主键或者是设置为NOT NULL的,则主表的删除和主键的更改跟 NO ACTION 一样。

(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)
);

(3)一对一
按照外键关联在IdCard表中的外键添加唯一约束
在这里插入图片描述
按照主键关联对主键添加外键约束
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值