前言
每一个程序员都拥有一座大厂梦,我也不例外,去年面试阿里,竟然被MySQL问倒了,很多相关性的问题都没有答上来,才2面就凉凉了。为面试做了很多准备,收集很多关于MySQL面试题,大家可以好好的了解一下!
一、MySQL有哪些特性?
- 使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性
- 支持AIX、FreeBSD、HP-UX、Linux、MacOS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统
- 为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
- 支持多线程,充分利用CPU资源
- 化的SQL查询算法,有效地提高查询速度
- 既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名
- 提供TCP/IP、ODBC和JDBC等多种数据库连接途径
- 提供用于管理、检查、优化数据库操作的管理工具
- 可以处理拥有上千万条记录的大型数据库
二、走进MySQL的世界
1、MySQL 性能优化的 21 个最佳实践
-
为查询缓存优化你的查询
-
EXPLAIN 你的 SELECT 查询
-
当只要一行数据时使用 LIMIT 1
-
为搜索字段建索引
-
在 Join 表的时候使用相当类型的例,并将其索引
-
千万不要 ORDER BY RAND()
-
避免 SELECT *
-
永远为每张表设置一个 ID
-
使用 ENUM 而不是 VARCHAR
-
从 PROCEDURE ANALYSE() 取得建议
-
尽可能的使用 NOT NULL
-
Prepared Statements
-
无缓冲的查询
-
把 IP 地址存成 UNSIGNED INT
-
固定长度的表会更快
-
垂直分割
-
拆分大的 DELETE 或 INSERT 语句
-
越小的列会越快
-
选择正确的存储引擎
-
选择正确的存储引擎
-
小心“永久链接”
三、MySQL面试题总结
之前的阿里面试题都有做总结,具体面试题内容整理成了文档,本文是针对MySQL系列的,所以下面只展示了自己第一次面试阿里时被吊打问到的一些MySQL难题,下面是今年面试阿里遇到MySQL的题目,需要答案解析的朋友可以关注公众号:麒麟改bug。
- 请解释关系型数据库概念及主要特点?
- 请说出关系型数据库的典型产品、特点及应用场景?
- 请详细描述 SQL 语句分类及对应代表性关键字。
- 什么是 MySQL 多实例,如何配置 MySQL 多实例?
- 如何加强 MySQL 安全,请给出可行的具体措施?
- 误操作执行了一个 drop 库 SQL 语句,如何完整恢复?
- 详述 MySQL 主从复制原理及配置主从的完整步骤。
- MySQL 如何实现双向互为主从复制,并说明应用场景?
- MySQL 如何实现级联同步,并说明应用场景?
- MySQL 主从复制故障如何解决?
四、MySQL55道面试专题你能答出多少?
-
一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 15 ?
-
Mysql 的技术特点是什么?
-
Heap表是什么?
-
Mysql 服务器默认端口是什么?
-
与 Oracle 相比,Mysql 有什么优势?
-
如何区分 FLOAT 和 DOUBLE?
-
区分 CHAR_LENGTH 和 LENGTH?
-
请简洁描述 Mysql 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
-
在 Mysql 中 ENUM 的用法是什么?
-
如何定义 REGEXP?
-
CHAR 和 VARCHAR 的区别?
-
列的字符串类型可以是什么?
-
如何获取当前的 Mysql 版本?
-
Mysql 中使用什么存储引擎?
-
Mysql 驱动程序是什么?
-
TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 数据类型上做什么?
-
主键和候选键有什么区别?
-
如何使用 Unix shell 登录 Mysql?
-
myisamchk 是用来做什么的?
-
MYSQL 数据库服务器性能分析的方法命令有哪些?
-
如何控制 HEAP 表的最大尺寸?
-
MyISAM Static 和 MyISAM Dynamic 有什么区别?
-
federated 表是什么?
-
如果一个表有一列定义为 TIMESTAMP,将发生什么?
-
列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况?
-
怎样才能找出最后一次插入时分配了哪个自动增量?
-
你怎么看到为表格定义的所有索引?
-
LIKE 声明中的%和_是什么意思?
-
如何在 Unix 和 Mysql 时间戳之间进行转换?
-
列对比运算符是什么?
-
我们如何得到受查询影响的行数?
-
Mysql 查询是否区分大小写?
-
LIKE 和 REGEXP 操作有什么区别?
-
BLOB 和 TEXT 有什么区别?
-
mysql_fetch_array 和 mysql_fetch_object 的区别是什么?
-
我们如何在 mysql 中运行批处理模式?
-
MyISAM 表格将在哪里存储,并且还提供其存储格式?
-
Mysql 中有哪些不同的表格?
-
ISAM 是什么?
-
InnoDB 是什么?
-
Mysql 如何优化 DISTINCT?
-
如何输入字符为十六进制数字?
-
如何显示前 50 行?
-
可以使用多少列创建索引?
-
NOW()和 CURRENT_DATE()有什么区别?
-
什么样的对象可以使用 CREATE 语句创建?
-
Mysql 表中允许有多少个 TRIGGERS?
-
什么是非标准字符串类型?
-
什么是通用 SQL 函数?
-
解释访问控制列表
-
MYSQL 支持事务吗?
-
mysql 里记录货币用什么字段类型好
-
MYSQL 数据表在什么情况下容易损坏?
-
mysql 有关权限的表都有哪几个?
-
Mysql 中有哪几种锁?
五、MySQL中数据类型介绍
六、MySQL管理员常用的一些命令
七、存储过程&自定义函数详解
八、什么是索引?
九、MySQL索引原理详解
十、聊聊如何使用MySQL实现分布式锁
Mysql系列的⽬标是:通过这个系列从⼊门到全⾯掌握⼀个⾼级开发所需要的全部技能。
分布式锁的功能
1.分布式锁使⽤者位于不同的机器中,锁获取成功之后,才可以对共享资源进⾏操作。
2. 锁具有重⼊的功能:即⼀个使⽤者可以多次获取某个锁。
3. 获取锁有超时的功能:即在指定的时间内去尝试获取锁,超过了超时时间,如果还未获取成功,则返回获取失败。
4. 能够⾃动容错,⽐如:A机器获取锁lock1之后,在释放锁lock1之前,A机器挂了,导致锁lock1未释放,结果会lock1⼀直被A机器占有着,遇到这种情况时,分布式锁要能够⾃动解决,小编这里还对应整理了一份MySQL优化500页的学习笔记,分享给到大家。可以这么做:持有锁的时候可以加个持有超时时间,超过了这个时间还未释放的,其他机器将有机会获取锁。
最后
篇幅有限,其他内容就不在这里一一展示了,欢迎大家一起交流,喜欢文章记得关注我点赞哟,感谢支持!