数据库三大范式&mysql的索引类型和作用&事务的特性和隔离级别

数据库三大范式&mysql的索引类型和作用&事务的特性和隔离级别

数据库三大范式

第一范式

# 数据库表的每一列都是不可分割的基本数据
-每列的值具有原子性,不可再分割
-每个字段的值都只能是单一值

举例:学籍信息不符合第一范式,可以继续分割

第二范式

# 在第一范式的基础上
- 如果表是单主键,那么主键以外的列必须完全依赖于主键,其他列需要跟主键有关系
- 如果表是符合主键,那么主键以外的列必须完全依赖于主键,不仅仅是依赖主键的一部分

举例:
1.上表中如果加上学校地址那么不符合规范,和主键没有关系,此时可以加上学校名,然后另建学校表,做外键关联,外键就是规范数据库的产物。
2.下表中分数字段完全依赖于学生id和课程id,但是课程名字只依赖于主键的一部分课程id,不符合规范

第三范式

# 在第二范式的基础上
- 表中的非主键列必须和主键直接相关而不能简介相关,即非主键列之间不能相互依赖,不存在依赖传递

举例:
下表中部门名称依赖于部门id,部门id依赖于id主键,部门名称不直接依赖于id主键,属于依赖传递,不符合规范

mysql的索引类型和作用

主键索引(聚簇索引)

-表不建立主键,也会有个隐藏字段是主键,是主键索引。主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。简单来说:主键索引是加速查询 + 列值唯一(不可以有null)+ 表中只有一个

辅助索引(普通索引)

咱们给某个字段自己加索引,django  index=True,通过该字段查询,会提高速度,如果字段 变化小(性别,年龄),不要建立普通索引
# CREATE INDEX index_id ON tb_student(id);

唯一索引(unique)

-不是为了提高访问速度,而是为了避免数据出现重复
-唯一索引通常使用 UNIQUE 关键字,允许有null
# CREATE UNIQUE INDEX index_id ON tb_student(id);

联合索引(组合索引)

- 组合索引指在多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合。
- 联合索引的目的是提高数据库查询的性能。它可以加快包含索引的列组合的查询速度,并提高相关查询的效率。
-django 中:
  class Meta:
        indexes = [
            models.Index(fields=['field1', 'field2']),
            models.Index(fields=['field2', 'field3']),
        ]
# CREATE INDEX index_name ON table_name (column1, column2, column3); 

全文索引

- 全文索引主要用来查找文本中的关键字,只能在 CHAR、VARCHAR 或 TEXT 类型的列上创建。
- 在 MySQL 中只有 MyISAM 存储引擎支持全文索引。
- 全文索引允许在索引列中插入重复值和空值。
- 不过对于大容量的数据表,生成全文索引非常消耗时间和硬盘空间。
- 创建全文索引使用 FULLTEXT 关键字

事务的特性和隔离级别

四大特性ACID

1.原子性(Atomicity):原子性确保事务中的所有操作要么全部成功完成,要么全部回滚到事务开始前的状态。如果事务中的任何操作失败,那么整个事务将回滚,以保持数据的一致性。原子性确保了事务的完整性和一致性。

2.一致性(Consistency):一致性确保事务在执行前后,数据库始终保持一致的状态。

3.隔离性(Isolation):隔离性确保并发执行的事务相互隔离,每个事务都像是在独立运行。通过隔离级别(如读未提交、读已提交、可重复读和串行化),数据库提供了对并发事务之间可见性的控制。

4.持久性(Durable):事务完成之后,她对数据的修改是永恒的,即时出现故障也能够正常保持

隔离级别

# Read uncommitted(读未提交)-ru  
- 一个事物读到了另一个事务未提交的数据

# Read committed(读已提交)-rc
-如果设置了这个级别一个事物读不到另一个事务未提交的数据
-写事务提交之前不允许其他事务的读操作
  
# Repeatable read(可重复读取)-rr
-在开始读取数据(事务开启)时,不再允许修改操作,这样就可以在同一个事务内两次读到的数据是一样的,因此称为是可重复读隔离级别
  
# Serializable(串行化)
事务串行执行,只能一个接着一个地执行,完全隔离了并发访问。它提供了最高的数据完整性,但并发性能最差
posted @ 2023-07-31 19:53  雀雀飞了  阅读(32)  评论(0编辑  收藏  举报