欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

面试官:你知道在MySQL数据库中MyISAM和InnoDB有什么区别吗?

时间:2023-08-02

你知道在MySQL数据库中MyISAM和InnoDB有什么区别吗?

作为一名软件开发者,对于mysql数据库,或多或少都会有所了解。

张工是一名程序员,有3年多开发经验,这3年主要是做java后端开发的,有次到广州一家软件公司应聘java开发岗位,面试官问了他这样一个问题:

你知道在MySQL数据库中MyISAM和InnoDB有什么区别吗?

面试官问他这个问题也不是随便问的,面试是看了张工的简历写着熟悉mysql才提问的。

其实对于mysql,张工平时也只是简单地用mysql建表,然后往数据表里写数据,查数据这样的简单操作,而没有去了解建表的原理。

对于这个问题,张工一下子也不知道两者到底有什么区别,于是直接回复他,“不知道”。

谁知面试官“你都工作3年了,怎么连MyISAM和InnoDB有什么区别都不知道?”

被面试官这么一说,张工都有些不好意思了。都怪自己平时做项目时只知道完成任务,而没有去了解其原理。

从张工这次面试,也给我们敲了下警钟,对于有些技术知识点,要是没有掌握,建议简历上不要写熟悉之类的,如果真要写,建议用了解这样的字样来描述。避免面试官问起时回答不出来,暴露了自己的不足。

那么在mysql数据库中MyISAM和InnoDB两者有什么区别呢,我们来简单了解下。

首先我们来看看我们自己正在使用的数据库采用的是什么引擎?

我们可以用下面的命令查看:

SHOW ENGINES;

从中我们可以看出mysql数据库为我们提供了非常多的存储引擎,从表中看出,InnoDB 的 Support 列是 DEFAULT,这就说明你正在使用的数据库服务器上,InnoDB 是默认的数据库引擎,不过 MySQL 对于多引擎有很好的兼容,一个数据库服务器上不同的数据库完全可以使用不同的数据引擎,甚至一个数据库中的多个表也可以使用不同的引擎。

下面我们来看看MyISAM和InnoDB两者有什么区别?

MyISAM

不支持事务,所以每次查询都是原子的;

支持表级锁,即每次操作是对整个表加锁;

存储表的总行数;

一个MYISAM表有三个文件:索引文件、表结构文件、数据文件;

采用非聚集索引(Non-clustered),索引文件的数据域存储指向数据文件的指针。

InnoDb

支持ACID的事务;

支持行级锁及外键约束;

不存储总行数;

一个InnoDb引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里),也有可能为多个,受操作系统文件大小的限制;

主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅索引;使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。

总结

作为一名程序员,平时在使用一些知识点时,建议要了解其原理,而不是停留在只会用的层面,需要了解 InnoDB 和 MyISAM 在使用上的区别,如果有兴趣,还有必要深入研究为什么会有哪些区别的话,这就需要了解其底层的实现原理,以及对 B+ 树有一定的了解。

如果你比较清晰地了解其背后的原理概要了,那么和面试官交流起来就会很舒服了,相信能为这次面试加分,被录用的概率就大大提高了。

由于笔者知识及水平有限,文中错漏之处在所难免,如有不足之处,欢迎交流。

-END-

微信公众号:爱开发

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。