【面试宝藏】MySQL 面试题解析

MySQL 面试题解析

1. 数据库三大范式是什么?
  • 第一范式(1NF):确保每列的原子性,即每列不能再分。
  • 第二范式(2NF):在满足 1NF 的基础上,每个非主属性完全依赖于主键,即消除部分依赖。
  • 第三范式(3NF):在满足 2NF 的基础上,任何非主属性不依赖于其他非主属性,即消除传递依赖。
2. MySQL 有关权限的表都有哪几个?

MySQL 的权限系统主要依赖以下系统表:

  • user:存储用户的全局权限。
  • db:存储特定数据库的权限。
  • tables_priv:存储特定表的权限。
  • columns_priv:存储特定列的权限。
  • procs_priv:存储存储过程和函数的权限。
3. MySQL 的 Binlog 有几种录入格式?分别有什么区别?

MySQL 的 Binlog 有三种格式:

  • Statement(语句):记录执行的 SQL 语句。优点是日志量小,但在某些情况下可能无法精确重放。
  • Row(行):记录每行数据的变化。优点是可以精确重放,但日志量大。
  • Mixed(混合):结合了 Statement 和 Row 的优点。MySQL 会根据具体情况选择最合适的格式。
4. MySQL 存储引擎 MyISAM 与 InnoDB 的区别?
  • 事务支持:InnoDB 支持事务,MyISAM 不支持。
  • 外键:InnoDB 支持外键,MyISAM 不支持。
  • 表锁和行锁:InnoDB 支持行级锁,MyISAM 只支持表级锁。
  • 崩溃恢复:InnoDB 有自动崩溃恢复功能,MyISAM 需要手动修复。
  • 全文索引:MyISAM 支持全文索引,InnoDB 从 MySQL 5.6 开始支持。
5. 什么是索引?

索引是一种用于提高数据库查询速度的数据结构。它类似于书籍的目录,可以快速找到所需的数据。

6. 索引有哪些优缺点?

优点

  • 提高数据检索速度。
  • 加速表连接操作。
  • 加速排序和分组操作。
  • 在条件查询中,提高检索效率。

缺点

  • 占用磁盘空间。
  • 在插入、删除和更新数据时,可能需要重建索引,影响写入性能。
7. 存储引擎有哪几种类型?

MySQL 支持多种存储引擎,常见的有:

  • InnoDB:支持事务和外键,使用广泛。
  • MyISAM:不支持事务,但速度较快。
  • MEMORY:数据存储在内存中,速度快,但断电数据丢失。
  • ARCHIVE:用于存储大批量的历史数据,支持高效的插入操作,不支持索引。
  • CSV:数据以 CSV 格式存储,便于与外部程序交互。
8. MySQL 中有哪几种锁?
  • 表锁:锁住整张表。分为读锁和写锁。
  • 行锁:锁住单行数据。InnoDB 支持行级锁。
  • 页锁:锁住数据页。InnoDB 也支持页锁,但不常用。
9. MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
  • 读未提交(Read Uncommitted):最低隔离级别,事务中的修改即使未提交,对其他事务也是可见的。
  • 读已提交(Read Committed):一个事务在提交前的修改对其他事务不可见。
  • 可重复读(Repeatable Read):事务在执行期间,看到的数据是一致的,即使其他事务进行了修改(默认隔离级别)。
  • 串行化(Serializable):最高隔离级别,事务完全串行化执行,避免了幻读。
10. CHAR 和 VARCHAR 的区别?
  • CHAR:定长字符类型,不足长度时会用空格补齐。适合存储定长数据。
  • VARCHAR:变长字符类型,存储的数据长度可变。适合存储可变长度的数据。
11. 主键和候选键有什么区别?
  • 主键(Primary Key):用于唯一标识表中的记录,每个表只能有一个主键,不能为空。
  • 候选键(Candidate Key):是唯一标识表中记录的属性集合,可以有多个候选键,其中一个可以作为主键。
12. 如何在 Unix 和 MySQL 时间戳之间进行转换?
  • Unix 时间戳转换为 MySQL 日期时间
    FROM_UNIXTIME(unix_timestamp)
    
  • MySQL 日期时间转换为 Unix 时间戳
    UNIX_TIMESTAMP(datetime)
    
13. MyISAM 表类型将在哪里存储,并且还提供其存储格式?

MyISAM 表的存储格式:

  • .frm 文件:存储表结构。
  • .MYD 文件:存储表数据。
  • .MYI 文件:存储表索引。
14. MySQL 里记录货币用什么字段类型好?

货币一般使用 DECIMAL 类型来存储,确保精度和防止舍入误差。例如:

DECIMAL(10, 2)
15. 创建索引时需要注意什么?
  • 选择合适的列:经常用于查询条件、排序和分组的列。
  • 避免过多的索引:每个索引都会占用空间和影响写入性能。
  • 复合索引:考虑创建复合索引,而不是多个单列索引。
  • 索引选择性:高选择性的列更适合作为索引。

版权声明

本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。

原文链接:CSDN

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值