第16课:Mysql常用经典面试题含答案

下面给出一些常用的经典mysql面试题和答案,希望在求职过程中能够给你带来帮助,也希望能给那些面试别人的大神带来点思路

1.如何确定 MySQL 是否处于运行状态
redhat运行命令 service mysqld status
或者用ps aux|grep mysqld看下mysql的进程在不在

2.如何通过 Shell 登入 MySQL?
mysql -u root -p

3.mysql中myisam与innodb的区别
InnoDB支持事物,而MyISAM不支持事物
InnoDB支持行级锁,而MyISAM支持表级锁
InnoDB支持MVCC, 而MyISAM不支持
InnoDB支持外键,而MyISAM不支持
InnoDB不支持全文索引,而MyISAM支持

4.MYSQL取得当前时间的函数是?,格式化日期的函数是
CURRENT_TIMESTAMP()
DATE_FORMAT()
select DATE_FORMAT("2011-11-21 10:10:10", "%Y-%m-%d")

5.事务是如何通过日志来实现的。
隔离性: 通过 锁 实现
原子性、一致性和持久性是通过 redo和undo来完成的。

6.查看mysql状态命令,比如慢查询是否开启
show status是系统状态  是动态
show variables 是系统参数  是静态

7.SELECT ... FOR UPDATE是干什么的
做事务写入前的确认

8.聚合索引遵循的原则
最优左前缀(自己网上查具体细节,不再累述)

9.mysql高效分页
SELECT * FROM `godeye` ORDER BY id DESC LIMIT 100000,2000
在此基础上增加id过滤
SELECT * FROM `godeye` WHERE id<=102000 and id > 100000 ORDER BY id DESC LIMIT 2000;
当然前提是id连续,如果不连续,只能根据自己项目的规律,尽量缩小范围
原则就是减少遍历的条数

10.MYSQL数据库索引类型都有哪些?
索引类型: B-TREE索引,哈希索引

11.mysql批量替换的SQL语句怎么写?
update `godeye` set body = replace(body,'old.godeye','www.godeye.org') 其中`godeye`为你的表名。body为字段名

12.mysql里记录货币用什么字段类型好
DECIMAL
DECIMAL和NUMERIC值作为字符串存储,而不是作为二进制浮点数,DECIMAL和NUMERIC值得最大的范围与DOUBLE一样
DECIMAL(9,2)在这个例子中,9(precision)代表将被用于存储值的总的小数位数,而2(scale)代表将被用于存储小数点后的位数

13.介绍一下MYSQL常用的优化技巧
MySQL 自带 slow log 的分析工具 mysqldumpslow
只要在 my.cnf 文件中配置好:
log-slow-queries = [slow_query_log_filename]
即可记录超过默认的 10s 执行时间的 SQL 语句。
如果要修改默认设置,可以添加:
long_query_time = 5
设定为 5s 

mysql explain的使用说明
explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。
使用方法,在select语句前加上explain就可以了:
如:explain select name, dec form a, b  where a.id = b.id

14.表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列
select case when A>B then A else B end,
       case when B>C then B else C end
from test