MyISAM 引擎:
- 不支持事务
- 使用表级锁,并发性差
- 主机宕机后,MyISAM 表易损坏,灾难恢复性不佳
- 可以配合锁,实现操作系统下的复制备份、迁移
- 只缓存索引
- 数据紧凑存储,因此可获得更小的索引和更快的全表扫描性能
两者主要区别:
- InnoDB 支持事务,MyISAM 不支持事务处理等高级处理。
- InnoDB 支持行级锁,而 MyISAM 仅支持表级锁。
- MyISAM 类型的表强调的是性能,其执行速度比 InnoDB 类型更快。
- MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用。
- InnoDB 支持外键,MyISAM 不支持。
- MyISAM 支持全文搜索,而 InnoDB 1.2.x 版本后才支持。
- 对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在MyISAM 表中可以和其他字段一起建立联合索引。
####高并发下,如何做到安全的修改同一行数据?
- 使用悲观锁。本质是当前只有一个线程执行操作,排斥外部请求的修改。遇到加锁的状态,就必须等待。结束了唤醒其他线程进行处理。但是, 我们的场景是“高并发”。也就是说,会很多这样的修改请求,每个请求 都需要等待“锁”,某些线程可能永远都没有机会抢到这个“锁”,这种请求就会死在那里。
- FIFO(先进先出)缓存队列思路,直接将请求放入队列中,这样就不会导致某些请求永远获取不到锁。有点强行把多线程变成单线程的感觉。
- 使用乐观锁。相对于“悲观锁”采用更为宽松的加锁机制,大都是采用带版本号(Version)更新。实现就是,这个数据所有请求都有资格去修改, 但会获得一个该数据的版本号,只有版本号符合的才能更新成功,其他 的返回抢购失败。
1. 乐观锁和悲观锁是什么,InnoDB 的标准行级锁有哪两种,解释其含义?
2. SQL 优化的一般步骤是什么,怎么看执行计划,如何理解其中各个字段的含义?
3. 数据库会死锁吗,举一个死锁的例子,mysql 是怎么解决死锁的?
4. MySQL 的索引原理,索引的类型有哪些,如何创建合理的索引,索引如何优化?
5. 聚集索引和非聚集索引的区别?
6. select for update 是什么含义,会锁表还是锁行还是其他?
7. 为什么要用 Btree 实现,它是怎么分裂的,什么时候分裂,为什么是平衡的?
8. 数据库的 ACID 是什么?
9. 某一个表有近千万的数据,CRUD 比较慢,如何优化?
10. MySQL 是怎么优化 table scan 的?
11. 如何写 SQL 能够有效地使用到复合索引?
12. MySQL 中 in 和 exists 的区别?
13. 数据库自增主键可能的问题?
14. MVCC 的含义,如何实现的?
15. MySQL 的主从延迟怎么解决?
16. 什么是回表,覆盖索引有什么作用?
17. B+Tree 索引和 Hash 索引区别?
18. 在 Mybatis 中,占位符$和#的区别(防止 SQL 注入)?
19. SQL 的注入攻击是什么,如何防范?
20. 什么时候添加 B+树索引?
21. MySQL 的嵌套事务?
22. 给出一个学生成绩 studuent 表,写一个 SQL 语句,统计每个学生所有成绩平均分大于 80 分的结果?
23. MySQL 中一条 SQL 语句的执行过程?
24. MySQL 中 int(11)中的 11 代表什么含义?
25. InnoDB 中为什么采用 B+树结构,而不是平衡树?
26. MySQL 索引的“创建”原则?
27. 为什么官方建议使用自增长主键作为索引?
28. MySQL 主从复制的作用和原理?
29. MySQL 事务日志?
30. JOIN 的用途?
31. PreparedStatement 和 Statement 的区别?
32. 数据库第一、第二、第三范式的理解?
33. MySQL 半同步复制原理?
34. MySQL 中 Distinct 与 Group by 的区别?
更多的答案解析,我这里就不一一例举出来了,避免文章篇幅过于冗长。下面截几张图,给大家参考一下,需要文档资料的话,>点击此处,免费领取!
获取完整MySQL面试资料,>点击此处,免费领取!
(img-T1U3iaNt-1628338294050)]
获取完整MySQL面试资料,>点击此处,免费领取!