1000道互联⽹java⾯试题(七)MySQL⾯试题
⾸先我个⼈属于在mysql上卡死⼀次⼜⼀次的⼈。。。毕竟⼩项⽬中,⼜不涉及什么⾼并发,所以什么表锁⾏锁压根不⽤想。甚⾄sql语句最多也就是个left join之类的,所以实际项⽬中sql优化近乎没有。当然了数据库设计更是可着怎么⽅便怎么来,三⼤范式完全就是个摆设。。总⽽⾔之,mysql⼀直对于我来说都是⼀个忽略的点。
然後⾯试的时候往深了问,⼀问⼀卡死。有时候会痛定思痛,前年有⼀段时间死磕MySQL,什么四⼤隔离级别啊,脏读幻读不可重复读啊,甚⾄关于B+树和hash我都⾃取其辱的仔细研究了下。⾄于索引,复合索引,索引失效等等,也都⼀个⼀个demo试过。
但是!说了这么多实战经验主要还是crud。然後没做过的东西靠死记硬背真的特别容易忘。吐了这么多槽只是为了表⽰对MySQL的重视,下⾯开始看关于MySQL的⾯试题。
1. MySQL中有⼏种锁?
1. 表级锁:开销⼩,加锁快。不会出现死锁。锁定粒度⼤,发⽣锁冲突的概率最⾼,并发度最低。
2. ⾏级锁:开销⼤,加锁慢。会出现死锁。锁定粒度⼩,发⽣锁冲突的概率最低,并发度也最⾼。
orphanremoval是什么
3. 页⾯锁:开销和加锁时间介于表锁和⾏锁之间,会出现死锁。锁定粒度介于表锁和⾏锁之间,并发度⼀般。
2. MySQL中有哪些不同的表格?
共有五种类型的表格
MyISAM
Heap
Merge
INNODB
ISAM
中文html模板3. 简述在MySQL数据库中MyISAM和INNODB的区别
MyISAM:不⽀持事务,但是每次查询都是原⼦的。⽀持表级锁,即每次操作都是对整个表加锁。
存储表的总⾏数。
html5导航栏下拉菜单⼀个MYISAM表有三个⽂件:索引⽂件,表结构⽂件,数据⽂件。
采⽤⾮聚集索引,索引⽂件的数据域存储指向数据⽂件的指针。辅索引与主索引基本⼀致,但是辅索引不⽤保证唯⼀性。
INNODB:⽀持ACID的事务,⽀持事务的四种隔离级别。
⽀持⾏级锁以及外键约束。因此可以⽀持写并发。
不存储总⾏数。
⼀个INNODB引擎存储在⼀个⽂件空间(共享表空间,表⼤⼩不受操作系统控制,⼀个表可能分布在多个⽂件⾥。)。也有可能为多个(设置为独⽴表,表⼤⼩受操作系统⽂件⼤⼩限制,⼀般为2G).
主键索引采⽤聚集索引(索引的数据域存储数据⽂件本⾝)。辅索引的数据域存储主键的值。因为从辅索引查数据,需要先通过辅索引到主键值,再访问辅索引。最好使⽤⾃增主键,防⽌插⼊数据时为维持B+树结构,⽂件的⼤调整。
4. MySQL中INNODB⽀持的四种⾷物隔离级别名称以及逐级之间的区别?
1. read uncommited:读到未提交数据(读未提交)
scanf用法复习2. read commited: 读已提交
3. repeatable read:可重复读
4. serializable:串⾏事务
5. CHAR和VARCHAR的区别?
1. CHAR和VARCHAR类型在存储和检索⽅⾯不同。
2. CHAR列长度固定为创建表时声明的长度。长度值范围是1-255.当实际存储不⾜声明长度时它们被⽤空格填充到特定长度,检索CHAR值时需
mysql面试题基础知识
要删除尾随空格。
3. VARCHAR是变长的。声明时的长度是可⽤最⼤值。
6. 主键和候选键有什么区别?
⼀个表只有⼀个主键。
主键也是候选键,按照惯例,候选键可以被指定为主键。并且可以⽤于任何外键引⽤。
7. myisamchk是⽤来做什么的?
⽤来压缩MyISAM表,者减少了磁盘或内存使⽤。
8. 问答题
MyISAM Static 和 MyISAM Dynamic 有什么区别?
在MyISAM Static上所有字段有固定宽度。 MyISAM Static在受损情况下更容易恢复。
二维表是线性结构吗
动态MyISAM(MyISAM Dynamic) 表将具有像TEXT,BLOB等字段,以适应不同长度的数据类型。
如果⼀个表有⼀列定义为TIMESTAMP。将发⽣什么?
每当⾏被更改时,时间戳字段将获取当前时间戳。
列设置为AUTO INCREMENT时,如果在表中达到最⼤值,会发⽣什么情况?
它会停⽌递增,任何进⼀步的插⼊都将产⽣错误,因为秘钥已被使⽤。
怎样才能出最后⼀次插⼊时分配了那个⾃动增量?
插⼊的时候递增
最后⼀条id是4
demo
15. 如何显⽰前50⾏?
在MySQL中,limit 0,50就是查询前50条。
其实分页的实现就是基于差不多的思路。
16. 可以使⽤多少列创建索引?
任何标准表最多可以创建16个索引列。
17. NOW()和 CURRENT_DATE()有什么区别?now()⽅法⽤于显⽰当前年⽉⽇时分秒。⽽current_date()仅显⽰年⽉⽇。
18. 什么是⾮标准字符串类型?