MySQL面试题整理

mysql面试题here

1. 主键、外键、超键、候选键

比较清晰的解释here

  • 超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以作为超键,多个属性组合在一起也可以作为超键。
  • 候选键:最小超键,没有冗余元素的超键。
  • 主键:数据库表中对存储数据对象予以唯一和完整标识的数据列或者属性的组合。主键是候选键里面的一个,是人为规定的。
  • 外键:在一个表中存在另一个表中的主键,这个主键称为外键

2. 视图的作用

通过here可以比较清晰的理解视图的作用。

视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询,不包含数据;使用视图可以简化复杂的sql操作,隐藏具体的实现细节,同时达到保护数据的目的。简单而言,视图对sql语句进行了封装,可以理解为封装为一个函数,提高了重用性。

应用场景:多个地方用到同样的查询结果;这个查询结果使用的SQL语句比较复杂。

对视图的更新将对其基表进行更新;视图主要用于简化检索,保护数据,并不用于更新,大部分视图都是不可以更新的。

3. drop, truncate, delete区别

  1. delete, truncate是删除表中数据,而drop是删除整张表
  2. delete语句执行删除的时候是每次从表中删除一行,同时将该行的删除操作作为事务记录在日志中保存以便进行回滚操作。truncate则一次性删除表中所有数据并不把单独的删除操作记录写入日志,删除的行是无法恢复的。
  3. 一般而言,删除速度的大小关系为:drop>truncate>delete
  4. delete属于DML,truncate和drop属于DDL。

4. DDL,DML

  • DDL(Data Definition Language):数据定义语言。定义或者改变表的结构,数据类型,表之间的链接和约束等初始化工作中。
  • DML(Data Manipulation Language): 数据操作语言。不改变表的结构,只改变表的内容

5. 数据库索引

here
索引就是根据表中的一列或者若干列按照一定顺序建立的列值与记录行之间的对应关系表,实际上是一张描述索引列的列值与原表中记录行之间一一对应的有序表。

数据库索引是数据库管理系统中的一种数据结构,以协助快速查询表中数据。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这种数据结构以某种方式指向数据,这样就可以在这些数据结构基础上实现高级查找算法,这种数据结构就是索引。

为表设置索引的代价:增加了数据库的存储空间;在插入和修改数据的时候花费的时间增长(因为索引也要改变)

6. MySQL数据库优化思路

6.1. SQL语句优化

  1. 避免在WHERE子句中使用!=, <>操作符,避免在WHERE子句中进行null值判断,否则将导致引擎放弃使用索引而采用全表扫描。可以设置默认值为0,此时查询的时候就可以将 WHERE num is null转化为 WHERE num = 0。
  2. 使用exists 替代in。
  3. 使用WHERE子句替代HAVING子句,因为HAVDING是检索出所有结果之后才对结果进行过滤。

6.2. 索引优化

  1. 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构。
  2. 在经常用在连接的列上创建索引,这些列一般是外键,可以加快连接的速度。
  3. 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。
  4. 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。
  5. 在经常使用WHERE子句的列上面创建索引,加快条件的判断速度。

6.3. 数据库结构优化

  1. 范式,反范式优化。
  2. 拆分表

6.4. 服务器硬件优化

7. 存储过程和触发器的区别

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次变异后再次调用不需要再次编译,用户可以通过指定存储过程的名字来执行它。

触发器也是SQL语句集,不同于存储过程,触发器主要通过事件进行触发而被执行的。

8. 悲观锁和乐观锁

  • 乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新数据的时候,会判断一下此期间别人是否更新了这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型。
  • 悲观锁:总是假设最坏的情况,每次去拿数据都认为别人会修改,所以每次在拿数据的时候都会上锁。

9. MySQL常用的存储引擎

  • MyISAM:是基于ISAM的存储引擎,具有较高的插入、查询速度,但是不支持事务。
  • InnoDB: 是事务型数据库的首选引擎,支持事务安全表,支持锁和外键。写效率差一些,会占用更多磁盘空间
  • MEMORY:所有数据存储在内存中,数据的处理速度快,但是安全性不高。
全部评论

相关推荐

3 7 评论
分享
牛客网
牛客企业服务