数据库复习总结(一)

数据库复习总结

基本概念

元祖:元组就是一行
码:就是属性,对应一列
候选码:能唯一标识实体的
主码:主键,唯一标识一个元祖,不能为空,一个表只能有一个主键。
外码:外检,一个关系中的某一个属性是其他关系中的主键

使用外键就可以使用级联操作减少代码量。

ER图

一般使用ER图来厘清数据库的关系。

数据库范式

1NF(第一范式)
属性不能再被分割了,保证属性的原子性
2NF(第二范式)
简单来说,存在一个主键,且其他列的元素对于主键都是完全依赖而不是部分依赖。可以举一个联合主键来说明
(姓名,课程)——》分数
分数是完全依赖于姓名和课程的。这样的关系是ok的
但是
(学号,课程)——》姓名,这个是不对的,因为姓名只依赖于学号,不依赖于课程。

在2NF的基础上 3NF 消除传递依赖。
比如一张表
学生 课程 系主任 系
主键为学生。其三他三个属性完全依赖于学生符合第二范式,可以通过系主任查询到系,这就不符合第三范式

学生 课程

系主任 系 这样就是符合第三范式了。

drop delete truncate

drop table 表明明,删除表
truncate 清空一张表里面的数据
delete 删除一列数据

DDL 与DML

DDL是增删改查等一些操作
DML是数据库定义操作

Mysql 的一些

什么是关系型数据库
什么是非关系型数据库
关系型数据库:一张二维的表,每一个元组拥有的元素都是固定的(有几列都是相同的)
非关系型数据库:每一个元组拥有的元素并不是固定的(可能多几列可能少几列)

Mysql 的引擎问题
InnoDB和MyISAM
其中,InnoDB提供事务支持,支持行级锁和表级锁,支持外键
MyISAM不支持事务(就不能回滚),不支持外键

Mysql 锁

  1. 表级别锁:一锁锁一整张表
  2. 行级别锁:一锁锁一行数据
  3. 乐观锁:给数据加一个版本号
  4. 悲观锁:锁死,事务完成之后才能动

事务

所谓事务就是一组操作逻辑,要么都执行,要么都不执行
ACID
原子性:操作不能被切割,事务就是最小的单位。
隔离性:事务与事务之间彼此隔离
持久性:事务提交之后的改变是持久化保存在磁盘上的
一致性:一致性,执行前后数据保持一致

事务的隔离级别以及会发生的错误

  1. 读未提交
  2. 读已提交
  3. 可重复度
  4. 串行化

脏读:当事务的隔离级别处于读未提交时,每一个事务都能看到其他事务的执行结果。这个时候存在事务A和事务B。事务A修改了数据但是未提交,事务B此时查询数据,查询到的是事务A未提交的数据,此时事务A因为某些原因回滚了操作,那么此刻事务B查询到的数据就是脏数据。

丢失修改:当事务A读取数据并且做出改变,此时事务B也读取数据做出改变,数据A提交,数据B提交就会导致有一个修改被忽视了。

解决脏读的可以使用读已提交来完成,处于读已提交的事务,不能查看到其他事务未提交的数据。就不存在读取到的数据被回滚的情况了。但是这个会导致一个不可重复读的问题。举例事务B查询了数据,此刻事务A修改了这个数据并且提交了,事务B再次查询这个数据。事务B的两次查询结果是不相同的,这个就导致了事务B不可重复读。

解决不可重复读的隔离级别是,可重复读。这个级别也是mysql默认的事务隔离级别。其核心就是,当一个事务开启的时候,他会记录此刻数据库的状态,其他的事务就算已经提交了,对数据库的改变,对于开启了可重复度级别的事务也是不可见的。比如事务A开启了,此刻事务B修改了数据库,但是这个修改对于事务A是看不到的。这个就会导致一个问题,幻读。当事务B往数据库新增了几条数据,但是事务A是查不到的,这就是幻读了。

解决幻读的问题使用的是串行化。可以理解为一个时刻只有一个事务在运行,当这个事务结束之后,才能有第二个事务执行,这个级别非常浪费资源。

一条sql语句是如何被执行的

  • 查询语句
    1. 查询该语句是否有权限,如果没有权限直接返回错误信息
    2. 通过分析器进行词法分析,提取关键元素,判断是否有语法错五
    3. 优化器执行sql语句
  • 更新
    1. 查询缓存

Mysql索引机制

  1. 什么是索引是一种用于快速查询和检索数据的数据结构。常见的索引有B树、B+树和Hash。
    举个例子,索引就相当于一个目录,有目录当然查的快咯。

  2. 索引的优缺点

    1. 优点
      1. 保证了数据的唯一性
      2. 提高查询速度
    2. 缺点
      1. 创建维护索引带来消耗
      2. 索引需要额外的物理空间
  3. Mysql中索引的类型

    1. 一张数据表里面只能有一个主键,且主键不能为null,不能重复
    2. 二级索引
      1. 唯一索引。列表中你不能出现重复数据,但是允许数据为null
      2. 普通索引
      3. 前缀索引
      4. 全文索引
  4. 索引的底层数据结构
    是用B+Tree(真的用B+Tree来做)来做的 特点就是叶子结点可以访问下一个叶子结点,而且只有叶子结点存数据

  5. 用B树做索引的话,结点又放数据又放索引,叶子结点彼此独立,查询的时候使用二分查找。

  6. 用Hash做索引的话会导致哈希冲突等问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值