面试必备的10道MySQL题

MySQL 事务,是我们去面试中高级开发经常会被问到的问题,很多人虽然经常使用 MySQL,SQL 语句也写得很溜,但是面试的时候,被问到这些问题,总是不知从何说起。下面我们先来了解一下什么是 MySQL事务,再给大家分享10道面试必备的MySQL题。

MySQL事务是数据处理的最小操作单元,是一组不可在分割的操作集合,这个操作单元里的一系列操作要么都成功,要么都失败。

1、MySQL主从复制的原理。
(1)、主库必须开启二进制日志
(2)、当有增删改的语句时,会记录到主库的binlog中
(3)、主库通过IO线程把binlog里面的内容传给从库的relay binlog(中继日志)(这是msyql复制是异步复制的原因)
(4)、从库的sql线程负责读取它的relay log里的信息并应用到数据库中
2、Seconds_Behind_Master的原理。
表示sql线程和io线程之间的时间差
具体的计算:从库服务器当前的时间戳与二进制日志中的事件的时间戳相对比得到的,所以只有在执行事件时才能报告延迟。
不足:
一些错误(例如主备的max_allowed_packet不匹配,或者网络不稳定)可能中断复制,由于主从复制是异步操作,Seconds_Behind_Master可能显示为0
3、主从延迟的主要原因有哪些?
(1)、慢SQL语句过多
(2)、从库的硬件比主库差
(3)、同一个主库下有过多的从库
(4)、网络延迟
(5)、表分区过多
(还有一些原因,欢迎补充)
4、MySQL常见存储引擎及各自特点。
(1)、InnoDB
支持事务、行级锁、支持外键约束,主要面向OLTP的应用,使用next-key locking 的策略来避免幻读现象的产生.
(2)、MyISAM
不支持事务、表锁设计、支持全文索引、读写互相阻塞、不支持外键约束;主要面向OLAP应用场景;缓存池只缓存索引文件,不缓存数据文件
(3)、Memory
将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。如果数据库重启或者奔溃,数据都将丢失。
(4)、TokuDB
支持事务、高压缩、告诉读写、基于稀疏树索引设计;支持大多数在线修改索引、添加字段。
(5)、Inforbright/infinidb
列式存储、高压缩、单列查询快
5、innodb_flush_log_at_trx_commit参数0、1和2分别代表什么?
innodb_flush_log_at_trx_commit参数可以控制将redo log buffer中的更新记录写入到日志文件以及日志文件刷新到磁盘的操作时机。
0
每秒一次触发log buffer写入log file中,并且log file刷新到磁盘。
(由于进程调度问题,不能保证每秒100%刷新;如果mysql进程崩溃,可能会丢失1s的事务;效率最高,但最不安全)
1
每次事务提交触发log buffer写入log file中,并且log file刷新到磁盘。
2
每次事务提交,log buffer写入log file中;每秒log file刷新到磁盘。
(如果操作系统崩溃或者停电,可能会丢失1s的事务)
6、Mysql中varchar和char的区别
CHAR列的长度固定为创建表时声明的长度,范围(0-255)
VARCHAR列的长度不固定,范围(0-65535)
7、varchar(50)中的50代表的含义、int(20)中20的含义。
varchar(50)中的50代表最多能存放50个字符
int(20)中20的含义表示显示宽度,跟着zerofill一起才有意义
8、MySQL binlog的几种日志录入格式的涵义、适用场景和在复制中的优劣。
(1)、statement level模式
每一条会修改数据的sql都会记录到master的binlog中,slave在复制时sql进程会解析成和原来master端执行过的相同的sql再次执行。
适用场景:对主从数据一致性要求不太高,并且很少用到函数、存储过程、触发器等场景
优点:bin-log日志量少
缺点:部分新功能(函数、存储过程、触发器)同步会有障碍,比如now()
(2)、row level模式
日志中会记录成每一行数据被修改的形式,然后再slave端再对相同的数据进行修改
适用场景:对主从数据一致性要求比较高的场景。
优点:记录的详细
缺点:binlog日志量过大
(3)、mixed模式
MySQL默认采用statement格式进行二进制日志文件的记录,但是在一些情况下会使用row格式,可能的情况有:
1)、表的存储引擎为NDB,此时对表的DML操作都会以ROW格式记录
2)、使用了UUID(),USER(),CURRENT_USER(),FOUND_ROWS(),ROW_count()等不确定函数时
3)、使用了insert delay语句
4)、使用了用户定义函数(UDF)
5)、使用了临时表
适用场景:对主从数据一致性要求不太高,可能会用到函数、存储过程、触发器等场景
优缺点介于statement和row模式之间
9、重做日志和二进制日志的区别(至少三点)
(1)涉及存储引擎不一样:
binlog记录的是所有存储引擎的操作记录
redo log只记录innodb存储引擎的日志
(2)记录内容不一样:
binlog记录的是关于一个事务的具体操作内容。为逻辑日志
而redo log记录的是每个页更改的物理情况
(3)写的时间不一样:
binlog文件仅在事务提交前进行提交,即只写磁盘一次
而在事务进行过程中,却不断有重做日志条目被写入到重做日志文件中。
10、Explain执行计划中要关注哪些要素?
(1)、type:本次查询表联接类型,从这里可以看到本次查询大概的效率
(2)、key:最终选择的索引,如果没有索引的话,本次查询效率通常很差
(3)、key_len:本次查询用于结果过滤的索引实际长度
(4)、rows:预计需要扫描的记录数,预计需要扫描的记录数越小越好
(5)、extra:额外附加信息,主要确认是否出现 Using filesort、Using temporary 类似情况

以上10道MySQL面试题,只是众多MySQL面试题中的部分,个人认为是比较典型的,出现频率也比较高的试题,希望对你们有帮助!

原文地址:https://blog.51cto.com/13007966/2458394

时间: 2024-10-15 02:07:45

面试必备的10道MySQL题的相关文章

MySQL工具:管理员必备的10款MySQL工具

MySQL是一个复杂的的系统,需要许多工具来修复,诊断和优化它.幸运的是,对于管理员,MySQL已经吸引了很多软件开发商推出高品质的开源工具来解决MySQL的系统的复杂性,性能和稳定性,其中大部分是免费提供的社区. 从单机到多个节点的环境,以下10个开源工具,对于使用MySQL的任何一个人都是比较管用的.该列表已经考虑到了各种编译.你会发现这些工具,可以帮助备份MySQL数据,提高性能,防止数据偏差,并在出现问题时记录相关的故障排除数据.   MySQL 工具1: mk-query-digest

每天10道编程题-第一天

[程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? [程序2]   题目:判断101-200之间有多少个素数,并输出所有素数. [程序3]   题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方. [程

0-100的10道四则运算题

#include<iostream> #include<time.h> #include<stdio.h> using namespace std; void main() { int t,num,a,n,i,b; srand(time(NULL));//根据时间产生随机数 for(i=0;i<10;i++) { a=rand()%100;//0-100随机一个数赋值 loop:b=rand()%100;//0-100随机一个数赋值???????? n=rand(

每天10道编程题-第四天

[程序31]   题目:将一个数组逆序输出. 1 package com.daliu.suanfa4; 2 3 public class Exp31 { 4 5 /** 6 * [程序31] 题目:将一个数组逆序输出. 7 */ 8 public static void main(String[] args) { 9 int myarr[]={1,6,9,8,5,3,7,6}; 10 for(int k=myarr.length-1;k>=0;k--) 11 System.out.print(m

每天10道编程题-第三天

[程序21]   题目:求1+2!+3!+...+20!的和 [程序22]   题目:利用递归方法求5!.  [程序23]   题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后问第一个人,他说是10岁.请问第五个人多大? [程序24]   题目:给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. [程序25]   题目:一个5位数,判断它是不是回文数.

每天10道编程题-第二天

[程序11]   题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?   [程序12]  题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%:20万到40万之间时,高于20万元的部分,可提成5%:40万到60万之间时高于40万元的部分,可提成3%:60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过10

10道有关ios的题

1.你使用过Objective-C的运行时编程(Runtime Programming)么?如果使用过,你用它做了什么?你还能记得你所使用的相关的头文件或者某些方法的名称吗? 2.你实现过多线程的Core Data么?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些需要在线程中创建或者传递?你是用什么样的策略来实现的? 3.Core开头的系列的内容.是否使用过CoreAnimation和CoreGrap

各位大佬Python的第一部分道基础题已经整理好了,希望大家面试的时候能用的上。

Python的第一部分道基础题,希望大家面试的时候能用的上. 1.为什么学习Python? Python是目前市面上,我个人认为是最简洁.最优雅.最有前途.最全能的编程语言,没有之一. 2.通过什么途径学习的Python? 通过自学,包括网上查看一些视频,购买一些相关专业的书籍. 3.Python和Java.PHP.C.C#.C++等其他语言相比? Python:轻量级.易学.自由/开放源码软件.可移植性.支持面向对象.丰富的库.规范的代码. Java:优点:开源性,功能强大,库多 缺点:编译速

MySQL的又一神器-锁,MySQL面试必备

原文链接:blog.ouyangsihai.cn >> MySQL的又一神器-锁,MySQL面试必备 1 什么是锁 1.1 锁的概述 在生活中锁的例子多的不能再多了,从古老的简单的门锁,到密码锁,再到现在的指纹解锁,人脸识别锁,这都是锁的鲜明的例子,所以,我们理解锁应该是非常简单的. 再到MySQL中的锁,对于MySQL来说,锁是一个很重要的特性,数据库的锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性,这样才能保证在高并发的情况下,访问数据库的时候,数据不会出现问题. 1.2 锁