MySQL 学习笔记

这篇博客详细介绍了MySQL数据库的设计,包括三大范式、反范式化及其优缺点,以及事务管理的ACID特性。同时,文章还讨论了事务的隔离级别,并通过实例解释了原子性、一致性、持久性和隔离性的概念。此外,还涵盖了索引的类型和作用,以及在使用日期函数、聚集函数、分组和联结时需要注意的事项,强调了如何通过合理设计提高数据库性能。
摘要由CSDN通过智能技术生成

MySQL

三大范式

关系数据库中的关系必须满足一定的要求,即满足不同的范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。

第一范式

1NF 是对属性的原子性,要求属性具有原子性,不可再分解

表:字段 1、字段 2(字段 2.1、字段 2.2)、字段 3 …

如学生(学号,姓名,性别,出生年月日),如果认为最后一列还可以再分成(出生年,出生月,出生日),它就不是一范式了,否则就是;

第二范式

2NF 是对记录的唯一性,要求记录有唯一标识,即实体的唯一性,即不存在部分依赖

表:学号、课程号、姓名、学分;

这个表明显说明了两个事务:学生信息,课程信息;由于非主键字段必须依赖主键,这里学分依赖课程号,姓名依赖学号,所以不符合二范式。

可能会存在的问题

  • 数据冗余:每条记录都含有相同信息;
  • 删除异常:删除所有学生成绩,就把课程信息全删除了;
  • 插入异常:学生未选课,无法记录进数据库;
  • 更新异常:调整课程学分,所有行都调整

正确做法

  • 学生:Student(学号,姓名);
  • 课程:Course(课程号,学分);
  • 选课关系:StudentCourse(学号,课程号,成绩)。

第三范式

3NF 是对字段的冗余性,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖

表:学号,姓名,年龄,学院名称,学院电话

因为存在依赖传递:(学号) ➡ (学生) ➡ (所在学院) ➡ (学院电话)。

可能会存在问题:

  • 数据冗余:有重复值;
  • 更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况。

正确做法

学生:(学号,姓名,年龄,所在学院);

学院:(学院,电话)。

反范式化

一般来说,数据库只需要满足第三范式(3NF)就行了

没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余达到以空间换时间的目的

〖例〗:有一张存放商品的基本表,“金额”这个字段的存在,表明该表的设计不满足第三范式,因为 “金额” 可以由 “单价” 乘以 “数量” 得到,说明 “金额” 是冗余字段。但是,增加 “金额” 这个冗余字段,可以提高查询统计的速度,这就是以空间换时间的作法。

Rose 2002 中,规定列有两种类型:数据列计算列。“金额”这样的列被称为 “计算列”,而“单价” 和“数量”这样的列被称为“数据列”。

范式化设计和反范式化设计的优缺点

优点 缺点
范式化 1. 可以尽量的减少数据冗余,数据表更新快体积小 < br />2. 范式化的更新操作比反范式化更快 < br />3. 范式化的表通常比范式化更小 1. 对于查询需要对多个表进行关联,导致性能降低 < br />2. 更难进行索引优化
反范式化 1. 可以减少表的关联 < br />2. 可以更好的进行索引优化 1. 存在数据冗余及数据维护异常 < br />2. 对数据的修改需要更多的成本

事务管理(ACID)

谈到事务一般都是以下四点

原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency)
事务前后数据的完整性必须保持一致。
隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

举个简单的例子理解以上四点

原子性(Atomicity)

针对同一个事务

image-20200717071053238

这个过程包含两个步骤:

A:800 - 200 = 600

B:200 + 200 = 400

原子性表示,这两个步骤一起成功,或者一起失败,不能只发生其中一个动作

一致性(Consistency)

针对一个事务操作前与操作后的状态一致

image-20200720150343366

操作前 A:800,B:200

操作后 A:600,B:400

一致性表示事务完成后,符合逻辑运算

持久性(Durability)

表示事务结束后的数据不随着外界原因导致数据丢失

操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T Head

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值