MySQL复习知识点(一)

MySQL复习笔记(一)

事务是什么?

事务时应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的更改都会撤销。也就是事务的原子性。

数据库的ACID特性?

原子性:是指事务是一个不可分割的工作单位,事务中的操作要么都成功,要么都失败。

一致性:事务前后数据的完整性必须保持一致。

隔离性:是指多个事务访问数据库时,一个事务不能被其他事务所干扰,多个并发事务之间数据要相互隔离。

持久性:是指一个事务一旦提交,它对数据库中数据的改变时永久性的,即便发生故障也不应该对其有任何影响。

请你介绍一下数据库的三大范式?

第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。

第二范式(2NF):首先满足1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在逐渐中的列必须完全依赖于主键,而不能之依赖于主键的一部分。

第三范式(3NF):首先满足2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列A依赖于非主键列B,非主键列B依赖于主键的情况。

请你介绍一下数据库的隔离级别?

读未提交(Read Uncommitted):一个事务还没提交时,它做的变更就能被别的事务看到。

读已提交(Read Committed):一个事务提交之后,它做的变更才会被其他事务看到。

可重复读(Repeated Read):一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据时一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。

串行读(Serializable):穿行化,就是对同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

数据库的脏读、幻读、不可重复读:

脏读:指一个事务A正在访问数据,并且对该数据进行了修改,但是这种修改还没有提交到数据库中(也可能因为某些原因RollBack了)。这时另外一个事务B也访问这个数据,然后使用了这个被A修改的数据,那么这个数据就是脏读的,并不是数据库中真实的数据。即事务A读到了事务B未提交的数据。

​ 解决办法:把数据库事务隔离级别调整到READ_COMMITTED即让用户在更新时锁定数据库,阻止其他用户读取,直到更新全部完成才让读取。

丢失修改:指在一个事务读取一个数据时,另外一个事务页访问该数据,那么在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。这样第一个事务内的修改结果就被丢失,因此称为丢失修改。即事务B修改了事务A修改的数据,导致事务A修改的数据丢失。

​ 解决办法:把数据库事务隔离级别调整到READ_COMMITTED即让用户在更新时锁定数据库,阻止其他用户读取,直到更新全部完成才让读取。

不可重复度:指在一个事务内多次读同一个数据。在这个事务还没有结束时,另一个事务也访问该数据。那么在第一个事务中两次读数据之间,由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。即在一个事务内,两次读到的数据不一样的情况。

​ 解决办法:把数据库事务隔离级别调整到REPEATABLE-READ。

幻读:一个事务读取了几行数据后,接着另一个并发事务插入了一些数据。在随后的查询中,第一个事务就会发现多了一些原本不存在的记录,就好像发生了幻觉一样。即事务A读取数据,事务B插入数据,A发现表中还没有查询的数据行

​ 解决办法:把数据库事务隔离级别调整到SERIALIZABLE_READ

请你说明一下left join和right join的区别?

left join(左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。

right join(右连接):返回包括右表中所有记录和左表中连接字段相等的记录。

MySQL数据库的索引类型:

索引数据结构:二叉树、红黑树、hash表、B-tree

  1. 普通索引:当一张表把某个列设为主键的时候,则该列就是主键索引。
  2. 唯一索引:索引列的值必须唯一,但允许右空值。如果组合索引,则列值的组合必须唯一。
  3. 主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。
  4. 组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合。
  5. 全文索引:主要用来查找文本中的关键字,而不是直接与索引中的值相比较。

InnoDB的索引实现(聚集索引)

  • 数据文件本身就是索引文件
  • 表数据文件本身就是按B+树组织的一个索引结构文件
  • 聚集索引的叶子节点包含了完整的数据记录
  • 表必须有主键,且推荐使用整形的自增主键
  • 普通索引结构叶子节点存储的是主键值

InnoDB主键索引的查找流程:通过.ibd文件找到对应的索引,索引的value即问那行对应的完整数据

为什么用的是B+树而不是B树?

B+树仅在叶子节点中存储全部的用户记录,而其他节点存储的只有主键和对应的页号,相比于B树在每个节点都存储完整的用户记录,B+树的树高更低,查询效率更高。

什么是聚集索引什么事非聚集索引?

聚集索引:以主键值的大小作为页和记录的排序规则,在叶子节点处存储的记录包含了表中所有的列。

非聚集索引:以索引列的大小作为页和记录的排序规则,在叶子节点处存储的记录内容是数据记录的地址,

使用索引时有哪些需要注意的?

  1. 索引列的类型应尽量小
  2. 只为用于搜索、排序或分组的列创建索引
  3. 可以只为索引列前缀创建索引,以减少索引占用的存储空间
  4. 尽可能的让主键拥有AUTO_INCREMENT属性,避免发生页分裂的情况
  5. 查询时尽量使用覆盖索引,避免回表操作带来的性能损耗

查询时用不到索引的情况(索引失效的情况)?

  1. 使用索引比全表扫描慢,不用索引
  2. 联合索引没使用第一部分
  3. 模糊查询以通配符%开头
  4. 若为字符串索引,与数值进行匹配的时候,数值没用引号,不走索引
  5. 在搜索条件中,索引列不以单独的列名存在,而使用表达式或函数进行操作的时候,不走索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值