除了根底题部分,小编方案收集整理的MySQL面试题还包含如下常识点或题型:
MySQL高功能索引
SQL句子
MySQL查询优化
MySQL高扩展高可用
MySQL安全性
首要咱们先来看一道真题:
真题
请写出下面MySQL数据类型表达的意义(int(0)、char(16)、varchar(16)、datetime、text)
常识点剖析
此真题首要调查的是MySQL数据类型。MySQL数据类型归于MySQL数据库根底,由此延伸出的常识点还包含如下内容:
MySQL根底操作
MySQL存储引擎
MySQL锁机制
MySQL业务处理、存储进程、触发器
下面咱们就来将这些常识一扫而光
数据类型考点:
1、整数类型,包含TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,别离表明1字节、2字节、3字节、4字节、8字节整数。任何整数类型都能够加上UNSIGNED特点,表明数据是无符号的,即非负整数。
长度:整数类型能够被指定长度,例如:INT(11)表明长度为11的INT类型。长度在大多数场景是没有意义的,它不会约束值的合法规模,只会影响显现字符的个数,并且需求和UNSIGNED ZEROFILL特点合作运用才有意义。
比如,假定类型设定为INT(5),特点为UNSIGNED ZEROFILL,假如用户刺进的数据为12的话,那么数据库实践存储数据为00012。
2、实数类型,包含FLOAT、DOUBLE、DECIMAL。
DECIMAL能够用于存储比BIGINT还大的整型,能存储准确的小数。
而FLOAT和DOUBLE是有取值规模的,并支撑运用规范的浮点进行近似核算。
核算时FLOAT和DOUBLE比较DECIMAL功率更高一些,DECIMAL你能够了解成是用字符串进行处理。
3、字符串类型,包含VARCHAR、CHAR、TEXT、BLOB
VARCHAR用于存储可变长字符串,它比定长类型更节约空间。
VARCHAR运用额定1或2个字节存储字符串长度。列长度小于255字节时,运用1字节表明,不然运用2字节表明。
VARCHAR存储的内容超出设置的长度时,内容会被切断。
CHAR是定长的,依据界说的字符串长度分配满足的空间。
CHAR会依据需求运用空格进行填充便利比较。
CHAR合适存储很短的字符串,或许一切值都挨近同一个长度。
CHAR存储的内容超出设置的长度时,内容相同会被切断。
运用战略:
关于常常改动的数据来说,CHAR比VARCHAR更好,由于CHAR不简略发生碎片。
关于十分短的列,CHAR比VARCHAR在存储空间上更有功率。
运用时要留意只分配需求的空间,更长的列排序时会耗费更多内存。
尽量避免运用TEXT/BLOB类型,查询时会运用暂时表,导致严峻的功能开支。
4、枚举类型(ENUM),把不重复的数据存储为一个预界说的调集。
有时能够运用ENUM替代常用的字符串类型。
ENUM存储十分紧凑,会把列表值紧缩到一个或两个字节。
ENUM在内部存储时,其实存的是整数。
尽量避免运用数字作为ENUM枚举的常量,由于简略紊乱。
排序是依照内部存储的整数
5、日期和时间类型,尽量运用TImestamp,空间功率高于dateTIme,
用整数保存时间戳一般不便利处理。
假如需求存储奇妙,能够运用bigint存储。
看到这儿,这道真题是不是就比较简略答复了。
答:int(0)表明数据是INT类型,长度是0、char(16)表明固定长度字符串,长度为16、varchar(16)表明可变长度字符串,长度为16、dateTIme表明时间类型、text表明字符串类型,能存储大字符串,最多存储65535字节数据)
MySQL根底操作:
常见操作
MySQL的衔接和封闭:mysql -u -p -h -P
-u:指定用户名
-p:指定暗码
-h:主机
-P:端口
进入MySQL指令行后:G、c、q、s、h、d
G:打印成果笔直显现
c:撤销当时MySQL指令
q:退出MySQL衔接
s:显现服务器状况
h:协助信息
d:改动履行符
MySQL存储引擎:
1、InnoDB存储引擎,
默许业务型引擎,最重要最广泛的存储引擎,功能十分优异。
数据存储在同享表空间,能够经过装备分隔。也便是多个表和索引都存储在一个表空间中,能够经过装备文件改动此装备。
对主键查询的功能高于其他类型的存储引擎。
内部做了许多优化,从磁盘读取数据时会主动构建hash索引,刺进数据时主动构建刺进缓冲区。
经过一些机制和东西支撑真实的热备份。
支撑溃散后的安全康复。
支撑行级锁。
支撑外键。
2、MyISAM存储引擎,
5.1版别前,是默许存储引擎。
具有全文索引、紧缩、空间函数。
不支撑业务和行级锁、不支撑溃散后的安全康复。
表存储在两个文件,MYD和MYI。
规划简略,某些场景下功能很好,例如获取整个表有多少条数据,功能很高。
全文索引不是很常用,不如运用外部的ElasticSearch或Lucene。
3、其他表引擎,
Archive、Blackhole、CSV、Memory
运用战略
在大多数场景下主张运用InnoDB存储引擎。
MySQL锁机制:
表锁是日常开发中的常见问题,因而也是面试傍边最常见的调查点,当多个查询同一时间进行数据修改时,就会发生并发操控的问题。
同享锁和排他锁,便是读锁和写锁。
同享锁,不堵塞,多个用户能够一起读一个资源,互不搅扰。
排他锁,一个写锁会堵塞其他的读锁和写锁,这样能够只允许一个用户进行写入,避免其他用户读取正在写入的资源。
锁的粒度
表锁,体系开支最小,会确定整张表,MyIsam运用表锁。
行锁,最大程度的支撑并发处理,可是也带来了最大的锁开支,InnoDB运用行锁。
MySQL业务处理:
MySQL供给业务处理的表引擎,也便是InnoDB。
服务器层不论理业务,由基层的引擎完成,所以同一个业务中,运用多种引擎是不靠谱的。
需求留意,在非业务表上履行业务操作,MySQL不会宣布提示,也不会报错。
存储进程:
为今后的运用保存的一条或多条MySQL句子的调集,因而也能够在存储进程中参加业务逻辑和流程。
能够在存储进程中创立表,更新数据,删去数据等等。
运用战略
能够经过把SQL句子封装在简略运用的单元中,简化杂乱的操作
能够确保数据的一致性
能够简化对变化的办理
触发器:
供给给程序员和数据剖析员来确保数据完整性的一种办法,它是与表事情相关的特别的存储进程。
运用场景
能够经过数据库中的相关表完成级联更改。
实时监控某张表中的某个字段的更改而需求做出相应的处理。
例如能够生成某些业务的编号。
留意不要乱用,不然会形成数据库及应用程序的保护困难。
我们需求紧记以上根底常识点,重点是了解数据类型CHAR和VARCHAR的差异,表存储引擎InnoDB和MyISAM的差异。
问题1:请阐明InnoDB和MyISAM的差异
答:InnoDB支撑业务,MyISAM不支撑;
InnoDB数据存储在同享表空间,MyISAM数据存储在文件中;
InnoDB支撑行级锁,MyISAM只支撑表锁;
InnoDB支撑溃散后的康复,MyISAM不支撑;
InnoDB支撑外键,MyISAM不支撑;
InnoDB不支撑全文索引,MyISAM支撑全文索引;
问题2:innodb引擎的特性
答:刺进缓冲(insert buffer)
二次写(double write)
自适应哈希索引(ahi)
预读(read ahead)
问题3:请罗列3个以上表引擎
答:InnoDB、MyISAM、Memory
问题4:请阐明varchar和text的差异
答:varchar可指定字符数,text不能指定,内部存储varchar是存入的实践字符数+1个字节(n《=255)或2个字节(n》255),text是实践字符数+2个字节。
text类型不能有默许值。
varchar可直接创立索引,text创立索引要指定前多少个字符。varchar查询速度快于text,在都创立索引的情况下,text的索引几乎不起作用。
查询text需求创立暂时表。
问题5:varchar(50)中50的意义
答:最多寄存50个字符,varchar(50)和(200)存储hello所占空间相同,但后者在排序时会耗费更多内存,由于order by col选用fixed_length核算col长度(memory引擎也相同)。
问题6:int(20)中20的意义
答:是指显现字符的长度,不影响内部存储,仅仅当界说了ZEROFILL时,前面补多少个 0