MySQL约束、数据库设计、备份与还原-02

5 篇文章 0 订阅
3 篇文章 0 订阅
第一节 约束
1.1.数据库约束的概述
1.1.1.约束的作用

对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无 法插入到表中。约束在创建表的时候添加比较合适。

1.1.2.约束的分类
约束名约束关键词
主键primary key
唯一unique
非空no null
外键foreign key
检查约束check 注:mysql 不支持
1.2.主键约束
  • 主键的特点:非空且唯一。

(1)在创建表时,添加主键

create table stu{
id int primary kep,
name varchar(20)
}

(2)删除主键

– 错误 alter table stu modify id int ;
alter table stu drop primary key;

(3)在创建表后,添加主键

– 方法一
alter table stu add primary key(id);
– 方法二
alert table stu modify id int primary key;

1.3.自动增长

主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值
(1)创建表时,添加自动增长

create table stu(
id int primary key auto_increment,-- 给id添加主键约束
name varchar(20)
)auto_increment=100; – 设置初始值

(2)删除自动增长

alter table stu modify id int;

(3)创建表后,添加自动增长

alert table stu modify id int auto_increment;

1.4.唯一约束
  • 什么是唯一约束:表中某列不能出现重复值
    (1)创建表时,添加唯一约束

create table stu(
id int,
phone_number varchar(20) unique – 添加唯一约束
);

  • 注意mysql中,唯一约束限定的列的值可以有多个null

(2)删除唯一约束

alter table stu drop index phone_number;

(3)创建表后,添加唯一约束

alter table stu modify phone_number varchar(20) unique;

1.5.非空约束
  • 什么是非空约束:某一列的值不能为零

(1)创建表时,添加非空约束

create table stu(
id int,
name varchar(20) not null – name不能为空
);

(2)删除非空约束

alter table stu modify name varchar(20);

(3)创建表后,添加非空约束

alter table stu modify name varchar(20) not null;

1.6.外键约束
  • foreign key,让表于表产生关系,从而保证数据的正确性。
    语法:[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)

(1)创建表时,天剑外键约束

-- 创建部门表(id,dep_name,dep_location)
-- 一方,主表
create table department(
    id int primary key auto_increment,
    dep_name varchar(20),  
    dep_location varchar(20)
);
-- 创建员工表(id,name,age,dep_id)
-- 多方,从表 
create table employee(  
	id int primary key auto_increment, 
	name varchar(20),  
	age int,  
	dep_id int  -- 外键对应主表的主键
	-- 创建外键约束  
	constraint emp_depid_fk foreign key (dep_id) references department(id) 
); 

(2)删除外键约束

–外键的名称:emp_depid_fk
alter table employee drop foreign key emp_depid_fk;

(3)创建表后,添加外键约束

alter table employee add constraint emp_depid_fk foreign key (dep_id) references department (id);

1.6.1.级联操作
  • 什么是级联操作
    在修改和删除主表的主键时,同时更新和删除副表的外键值,称为级联操作
级联操作语法描述
on update cascade级联更新,只能是创建表的时候创建级联关系。更新主表中的主键,从表中的外键 列也自动同步更新
on delete cascade级联删除

演示:

-- 重新创建employee表,添加级联更新和级联删除  
create table employee(  
id int primary key auto_increment, 
name varchar(20),  
age int,  
dep_id int,  -- 外键对应主表的主键  
-- 创建外键约束  
constraint emp_depid_fk foreign key (dep_id) references department(id) on update cascade on delete cascade
);
第二节 表与表之间的关系
2.1.表关系的概念
  • 现实生活中,实体与实体之间肯定是有关系的,比如:老公和老婆,部门和员工,老师和学生等。那么我们 在设计表的时候,就应该体现出表与表之间的这种关系!
表与表之间的三种关系
一对多:最常用的关系 部门和员工
多对多:学生选课表 和 学生表, 一门课程可以有多个学生选择,一个学生选择多门课程
一对一:相对使用比较少。员工表 简历表, 公民表 护照表
2.2.一对多
  • 一对多(1:n) 例如:班级和学生,部门和员工,客户和订单,分类和商品 一对多建表原则: 在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键
    在这里插入图片描述
2.3.多对多
  • 多对多(m:n) 例如:老师和学生,学生和课程,用户和角色
  • 多对多关系建表原则: 需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的 主键。
    在这里插入图片描述
2.4.一对一

一对一(1:1) 在实际的开发中应用不多.因为一对一可以创建成一张表。
在这里插入图片描述

第三节 数据库设计的范式
3.1.数据规范化
3.1.1.什么是范式

好的数据库设计对数据的存储性能和后期的程序开发,都会产生重要的影响。建立科学的,规范的数据库就需 要满足一些规则来优化数据的设计和存储,这些规则就称为范式

3.1.2.三大范式
  • 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF) 、 第四范式(4NF)和第五范式(5NF,又称完美范式)。
  • 满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF) , 其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
3.2.第一范式(1NF)
3.2.1.概念

数据库表的每一列都是不可分割的原子数据项,不能是集合、数组等非原子数据项。即表中的某个列有多个值 时,必须拆分为不同的列。简而言之,第一范式每一列不可再拆分,称为原子性。

3.2.2.班级表

在这里插入图片描述

3.3.第二范式(2NF)
3.3.1.概念
  • 在满足第一范式的前提下,表中的每一个字段都完全依赖于主键。
  • 所谓完全依赖是指不能存在仅依赖主键一部分的列。简而言之,第二范式就是在第一范式的基础上所有列完全依赖于主列。当存在一个复合主键包含多个主键列的时候,才会发生不符合第二范式的情况。比如有一个主键有 两个列,不能存在这样的属性,它只依赖于其中一个列,这就是不符合第二范式。

第二范式的特点:

  1. 一张表只描述一件事情。
  2. 表中的每一列都完全依赖于主键
3.3.2.示例
  1. 借书证表:
    在这里插入图片描述
  2. 分为两张表:
    在这里插入图片描述
3.4.第三范式(3NF)
3.4.1.概念

在满足第二范式的前提下,表中的每一列都直接依赖于主键,而不是通过其它的列来间接依赖于主键。
简而言之,第三范式就是所有列不依赖于其它非主键列,也就是在满足 2NF 的基础上,任何非主列不得传递 依赖于主键。所谓传递依赖,指的是如果存在"A → B → C"的决定关系,则 C 传递依赖于 A。因此,满足第三范 式的数据库表应该不存在如下依赖关系:主键列 → 非主键列 x → 非主键列 y

3.4.2.示例:学生信息表

在这里插入图片描述

  • 存在转递关系
    学号——>所在学院——>学院地点
  • 拆分成两张表
    在这里插入图片描述
3.4.3.三大范式小结
范式特点
第一范式原子性:表中的每一列不可再拆分
第二范式不产生局部依赖,一张表只描述一件事情
第三范式不产生传递依赖,表中每一列都直接依赖于主键。而不是通过其它列间接依赖于主键
第四节 数据库的备份与还原
4.1.备份的应用场景

在服务器进行数据传输、数据存储和数据交换,就有可能产生数据故障。比如发生意外停机或存储介质损坏。 这时,如果没有采取数据备份和数据恢复手段与措施,就会导致数据的丢失,造成的损失是无法弥补与估量的。

4.2.备份与还原的语句
4.2.1.备份格式: DOS下,未登录的时候。这是一个可执行文件exe,在bin文件夹

mysqldump -u 用户名 -p 密码 数据库 > 文件的路径

4.2.2.还原格式:mysql中的命令,需要登录后才可以操作

USE 数据库;
SOURCE 导入文件的路径;

4.2.3.备份的操作

– 备份day21数据库中的数据到d:\day21.sql文件中
mysqldump -uroot -proot day21 > d:/day21.sql

  • 导出结果:数据库中的所有表和数据都会导出成 SQL 语句
4.2.4.还原的操作
  • 还原 day21 数据库中的数据,注意:还原的时候需要先登录 MySQL,并选中对应的数据库。

use day21;
source d:/day21.sql;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值