ACID 原则
- 原子性:要么都成功,要么都失败
- 一致性:事务前后的数据完整性要一致
- 隔离性:多个用户并发的访问数据库时,数据库为每一个用户开启的事务不能被其他事务的操作所干扰,事务之间相互隔离
- 持久性:事务一旦提交则不可逆,被持久化到数据库中
脏读 幻读 不可重复读
- 脏读:一个事务读取了另一个事务未提交的数据
- 不可重复读:在一个事务内读取表中的某一行数据,多次读取的结果不同
- 虚读(幻读):在一个事务内读取到了别的事务插入的数据,导致见后读取不一致
索引
索引是帮助MySQL高效获取数据的数据结构。
索引就是数据结构
索引分类
-
主键索引 (primary key)
-
- 唯一的标识,主键不可重复,只能有一个列作为主键
-
唯一索引 (unique key)
-
- 避免重复的列出现,唯一索引可以重复,多个列都可以标识为唯一索引
-
常规索引 (key/index)
-
- 默认的,可以用index或key来设置
-
全文索引 (fulltext)
-
- 在特定的数据库引擎下才有 MyISAM
-
- 快速的定位数据
在一个表中,主键索引只能有一个,可以有多个唯一索引
数据库的设计
- 收集信息,分析需求:分析业务和需要处理的数据库的需求
- 概要设计:设计关系图 E-R图
(未完,待续)
设计个人博客
-
收集信息,分析需求
-
- 用户表(用户登录和注销,用户的个人信息,写博客,创建分类)
- 分类表 (文章的分类)
- 文章表 (具体的文章的信息)
- 有链表 (友链信息)
-
标识实体(把需求落实到每一个字段)
三大范式
关系型数据库设计:三大范式的通俗理解 - 景寓6号 - 博客园 (cnblogs.com)
- 第一范式
原子性:要求数据库的每一列都是不可分割的原子数据项,就是你的数据库的每一列信息都不可以再拆分,比如数据库有一列家庭信息可以拆分为人口,家庭地址,学校信息里有学历,大几,研几可以被拆分,就不符合第一范式
- 第二范式
先得满足第一范式,第二范式需要保证数据库表中的每一列都和主键相关,不能只与主键一部分相关,每张表只描述一件事,内容得和主键有关
- 第三范式
先得满足第一和第二范式
,第三范式需要确保数据库表中的每一列数据都和主键直接相关,而不能间接相关,个人理解在这主要是为了解决表的冗余问题
但是实际生产中,需要注意
- 关联查询的表不得超过3张表
-
- 考虑商业化需求和目标。数据库的性能更加重要
- 在规范性能问题的时候,需要适当的考虑规范性
- 故意给表增加一些冗余字段,就能在查询的时候夺标查询变成单表查询
- 故意增加一些计算列(从大数据量降低为小数据量的查询:索引)