1. 请写出什么是事务?

    事务是一组不可分割的 DML 语句,事务处理可以用来维护数据库的完整性,保证一组 SQL 语句要么全部执行成功,要么全部不执行,只有 InnoDB 存储引擎才支持事务 。
  2. 事务的特性是什么?

    A(Atomicity):事务具有原子性,一个事务不可分割,要么全部执行成功,要么全部执行失败。
    C(Consistency):事务具有一致性,事务执行前后,要符合原始数据库的预设,数据库的完整性没有被破坏。
    I(Isolation):事务具有隔离性,事务之间内部互不干扰,一个事务在提交之前,对于其他事务是透明的。
    D(Durability):事务具有持久性,一旦事务提交存入数据库,会永久保存。
  3. MySQL事务的隔离级别有几种,分别是什么?

    MySQL 事务的隔离级别有四种,
    # RU(Read-Uncommited):未提交读,所有事务都可以看到其他事务未提交的修改
    # RC(Read-Commited):提交读,一个事务只能看到其他事务已经提交的修改
    # RR(Repeatable-Read):可重复读,确保同一个事务的多个实例,在并发读取数据时,看到相同的数据行
    # Serializable:可串行化,事务串行执行
  4. 什么是脏读,幻读,不可重复读?

    # 脏读:RU级别 会出现,执行事务时修改记录并未提交,另一个事务读取该记录,但最终数据回滚,查询到的数据,就是脏数据
    # 幻读:RU/RC/RR级别 会出现,删除所有表数据,删除的同时有人插入数据,表中仍然有记录
    # 不可重复读:RU/RC级别 会出现,开启一个事务,查询某一条数据,另外一个事务修改这一行数据提交,再次查询这一条数据结果不同
  5. 如何解决脏读,幻读,不可重复读的问题?

    根据具体环境使用不同的隔离级别??
  6. MySQL中索引的分类有几种?分别是什么?

    BTree
    RTree(MySQL 中很少使用)
    Hash(Memory 存储引擎支持)
    Fulltext(MyISAM 存储引擎支持)
  7. 请写出如下慢查询SQL语句的排查过程?及解决办法

    Select * from world.city where population>100;
    
    # 全表扫描,并且读取每行的所有数据
    # 解决办法:
    # 给 id 建立主键索引,给 population 建立辅助索引,查询的时候先扫描辅助索引表,再扫描主键(聚集)索引表,查询速度会快一些
  8. MySQL 存储引擎,InnoDB 与MyISAM 的区别?

    InooDB 存储引擎:
    1)支持事务
    2)行级锁
    3)查询速度相对 MyISAM 存储引擎较慢(使用行级锁查询开销大)
    4)不支持 fulltext 数据类型
    5)不保存表的具体行数,使用 Count 函数需要全表扫描
    6)物理文件构成: .frm(表结构) .ibd(表索引 & 表数据)
    7)支持外键
    8)对于设置 AUTO_INCREMENT 的列,必须要创建索引,即使是联合索引,也必须置于第一列
    9)UPDATE 时使用行级锁,并发量相对较大,可以应对大量的 INSERT 或者 UPDATE MyISAM 存储引擎:
    1)不支持事务
    2)表级锁
    3)查询速度相对 InnoDB 存储引擎较快(使用表锁查询开销小)
    4)支持 fulltext 数据类型
    5)保存表的具体行数,使用 Count 函数不需要全表扫描
    6)物理文件构成: .frm(表结构) .MYI(表索引) .MYD(表数据)
    7)不支持外键
    8)对于设置 AUTO_INCREMENT 的列,必须要创建索引,但若是联合索引,不要求必须置于第一列
    9)UPDATE 时使用表级锁,并发量较少
  9. 数据类型,varchar和char的区别?

    vachar 是变长字符串类型,字符串没有占满,不会用空格字符填充
    char 是定长字符串类型,字符串没有占满,用空格字符填充
  10. Int 类型的范围是多少?

    2^31  ————  2^31 - 1
  11. 请写出以下锁的功能?

    共享锁:又称读锁,若事务对数据行读取、加了读锁,其他事务只能对该数据行加读锁,不能加写锁
    排它锁:又称写锁,若事务对数据行修改、加了写锁,其他事务不能对该数据行加任何锁
    乐观锁:当要对数据库中的一条数据进行修改的时候,不会加锁,提交时会检测是否与其他事务有冲突
    悲观锁:当要对数据库中的一条数据进行修改的时候,为了避免同时被其他人修改,最好的办法就是直接对该数据进行加锁以防止并发
  12. 请写出innodb存储引擎锁粒度是什么?

    InnoDB 存储引擎锁的粒度是 行级锁
  13. 请写出,delete、drop、truncate的区别

    Delete 删除表数据时,会一条一条记录的清空,表结构还在
    Drop 删除整个表,表结构也会删除
    Truncate 删除表数据时,释放存储表数据所用的数据页来删除数据,在事务日志中只记录页的释放,表结构还在
  14. 如何使用update代替delete?

    另外添加一个 字段类型,例如:
    ALTER TABLE students ADD COLUMN status enum(1,0) default 1; 如果学生在读,字段赋值为 1,
    如果学生辍学,可以将字段赋值为 0,
  15. 请写出MySQL主从复制原理,画图 + 文字描述

    主库配置:
    # 主库配置 server_id ,开启 bin-log (/etc/my.cnf)
    # 主库创建授权主从复制用户(grant replication slave)
    # 获取主库的 binlog 信息(file,position)
    # 导出主库数据(mysqldump -uroot -p -A -R --triggers --master-data=2 --single-transaction > /tmp/full.sql) 从库配置:
    # 从库配置 server_id
    # 确认使用主库的主从复制用户可以连接主库
    # 导入主库数据(mysql < full.sql)
    # 配置主从(change master to),需要 Master节点 IP,用户,端口,binlog-file,binlog-pos
    # binlog 配置信息可以从 full.sql 中 22 行获得 工作原理:
    # 1. Start slave 之后,从库开启 IO线程 和 SQL线程
    # 2. 主库开启 Dump线程
    # 3. IO线程 向 Dump线程 发起询问,询问是否有新的数据
    # 4. Dump线程 被询问,查找是否有新数据,若有返回给 IO线程
    # 5. IO线程 拿到数据,写入TCP缓存
    # 6. TCP缓存拿到数据,写入relay-log,并返回给 IO线程一个 ACK报文
    # 7. IO线程 收到 ACK报文,会记录当前位置到 master.info(binlog 位置点)
    # 8. SQL线程 会主动读取 relay-log,执行主库执行的sql语句
    # 9. 执行后,将执行到的位置点,记录到 relay-log.info(relay-log 位置点)
  16. 请写出半同步复制和延时从库的原理?

    半同步复制:I/O 线程为了主库与从库的数据统一,会阻止主库的数据写入,当数据写入超时,自动切换为主从复制
    
    延时复制:I/O 线程将 Binlog 事件写入 TCP 缓存再写入 Relay-log,此过程不延时
    SQL 线程读取 Relay-log 中的事件延时执行
  17. 请写出MySQL主从复制的相关文件和线程名

    主库文件:
    binlog 从库文件:
    relay-log
    master.info
    relaylog.info 主库线程:
    Dump 线程 从库线程:
    I/O 线程
    SQL 线程
  18. MySQL如何保证数据的安全性和一致性?

    Redolog 保证数据库崩溃也可以使在内存中修改后,未落入到磁盘的数据恢复,保证数据安全性
    Undolog 为每一个事务赋予一个唯一的标识 trxid,记录着该事务是否 Commit,保证数据一致性
  19. 请写出MySQL二进制日志的工作模式有几种?区别是什么?

    语句模式:记录 SQL语句,易读性好,占用磁盘空间较小
    
    行模式:记录变化过程,不易读,需要使用选项查看,占用磁盘空间较大
    
    混合模式:前两种混合使用
  20. 请写出mysqldump常用参数及含义

    -u:用户
    -p:密码
    -h:指定 IP
    -S:指定 socket 文件
    -A:全库备份
    -B:指定库
    -F:指定备份时,刷新 binlog
    --master-data:指定备份时,change master to 语句是否加注释
    1)等于2:记录 binlog 信息,并注释(日常备份)
    2)等于1:记录 binlog 信息,不注释(扩展从库)
    0)等于0:不记录 binlog 信息
    --single-transaction:创建一个全库数据的一致性快照,开启一个单一事务
    -d:只备份表结构
    -t:只备份数据
    -R:备份存储过程和函数
    --triggers:备份触发器
  21. 请写出如何截取二进制日志和中继日志?

    mysqlbinlog -d business --start-position=825 --stop-position=1405 mysql-bin.000005 > /tmp/additional.sql
    
    mysqlbinlog -d business --start-position=825 --stop-position=1405 relay-log.000005 > /tmp/additional.sql
  22. 如何在数据库中只备份单表?

    # 备份 shop 库下的 product 表,
    mysqldump shop product > /tmp/product.sql
    # 当不加参数时命令后面跟的是库名,库的后面全都是必须是库下面的表名
  23. 如何在已运行在生产环境中的集群,添加一台从库?

    新准备一台服务器,安装并初始化 MySQL
    在主库上创建一个专用复制用户
    在主库上获取 Binlog-file 和 Binlog-pos 值,并将全部数据导出传送给从库
    从库导入全部数据
    从库执行 change master to 命令配置连接主库信息(主库IP,user,password,file,pos)
    从库执行 start slave;
  24. 请写出MHA的工作原理?

    使用一个虚拟IP地址,绑定在主库节点上,
    主库节点服务出现故障,虚拟IP地址立刻漂移到从库的服务器上
  25. 在阿里云中如何使用MHA?

    买它
  26. 请写出MySQL 主从复制IO线程报错的排查思路?

    # 检查网络 PING 一下
    # 检查端口
    # 使用 myql 命令,使用复制用户连接一下主库
    # 检查配置文件 server_id
    # 检查主库从库的 UUID
    # 防火墙
  27. 请写出MySQL 主从复制SQL线程报错的解决办法?

    # 重新导入主库全部数据,再做同步
  28. 如何设置MySQL的 session变量及全局变量?

    设置全局变量:
    1)修改 my.cnf
    2)mysql> SET GLOBAL AUTOCOMMIT=1; 设置会话变量:
    1)mysql> SET SESSION AUTOCOMMIT=1;
  29. 什么是水平分表?什么是垂直分表?表真的分了么分成什么样的了?

    水平分表:讲一个表中的数据记录,拆分到多个表中,所有的表结构都相同,意义就是用来分担更多的并发,扩展更多的容量
    
    垂直分表:将一个表的所有字段分组拆分,重新构成多个表,可以用外键建立表之间的关联
  30. 请写出,你在企业中,MySQL遇到数据不一致问题时,是如何解决的?

    检查事务的隔离级别??
  31. 什么是存储过程?用什么来调用?

    存储过程类似于一个函数,需要使用 CALL 主动调用
  32. 什么是触发器?触发器的作用是什么?

    由事件来触发,当对一个表进行操作(INSERT,DELETE,UPDATE)时就会激活它执行
  33. 主键和唯一键还有候选键有什么区别?

    主键和唯一键区别:主键是非空的
    候选键:随意一个候选键都可以作为主键
  34. AUTO_INCREMENT 可不可以设置最大值,可以的话怎么设置

    不可以
  35. 查询时运算符都有哪些

    <
    >
    =
    !=
    <>
    >=
    <=
    %
    _
    &&
    ||
    AND
    OR
    NOT
    IN
  36. 列出我们用过的函数(最少4个)

    COUNT
    DISTINCT
    SUM
    MAX
    MIN
  37. 怎么查看一个表的字符类型(最少两种方法)

    SHOW CREATE TABLE `table_name`;
    DESC `table_name`;
  38. B+tree索引对比Btree索引在哪里进行了优化

    B+tree 在叶子节点上添加了指针,指向相邻的叶子节点
  39. Mysql 优化该怎么做?

    # 1.选择合适的存储引擎
    # 2.选择合适的字段建立索引
    # 3.选择合适的数据类型(用 varchar 代替 char)
    # 4.表数据过多时,需要对表数据拆分
  40. SQL语言包括哪几部分?每部分都有哪些命令?

    DDL(Data Defination Language):CREATE DROP ALTER
    DML(Data Manipulation Language):UPDATE INSERT DELETE
    DQL(Data Query Language):SELECT DESC
    DCL(Data Control Language):GRANT REVOKE BEGIN COMMIT ROLLBACK
  41. 请说明主键、外键和索引的区别?

    主键: 一行记录的唯一标识
    外键: 一个表和另一个表数据之间关联,在主表中建立外键关联另一个表,外键必须是唯一键,但不一定是主键
    索引: 包括主键索引,唯一键索引,普通索引
  42. 索引有哪些优缺点?

    优点:提升了查询速度
    缺点:占用磁盘空间
    优点
    1、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
    2、可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
    3、可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
    4、在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
    5、通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能
    缺点
    1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
    2、索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立 聚簇索引,那么需要的空间就会更大。
    3、当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
  43. 索引有哪几种类型?

    主键索引
    唯一键索引
    普通索引
    全文索引
  44. 请写出给table表id字段添加索引和删除索引的命令?

    ALTER TABLE table ADD PRIMARY KEY(id);
    ALTER TABLE table DROP PRIMARY KEY;
  45. 一般创建索引你会考虑到那些?

    创建主键索引:
    该字段的值是否都是唯一的
    该字段的值是否都是非空的
    只能创建一个主键索引 创建唯一键索引:
    该字段的值是否都是唯一的 创建普通索引或联合索引:
    该字段的值中重复值数量
    该字段的值是否经常用来查询
  46. 什么是临时表

    临时表只在当前连接可见,当关闭连接时,MySQL 会自动删除表并释放所有空间
    1、union查询
    2、对于视图的操作,比如使用一些TEMPTABLE算法、union或aggregation
    3、子查询
    4、join 包括not in、exist等
    5、查询产生的派生表
    6、复杂的group by 和 order by
    7、Insert select 同一个表,mysql会产生一个临时表缓存select的行
    8、多个表更新
    9、GROUP_CONCAT() 或者 COUNT(DISTINCT) 语句
  47. 数据库分几种?分别都有哪些?

    关系型数据库:
    MySQL
    Oracle
    非关系型数据库:
    Memcached
    Redis
  48. 什么情况下索引会不生效

    1)查询条件中没有索引
    2)隐式转换,如 char 类型比较 Int 类型
    3)联合索引的顺序不符合条件时
    4)索引损坏
    5)在字符串前使用 "%" 或者 "_" 模糊匹配时
    6)查询条件字段参与了运算
    7)查询的结果占总数据的 15% 以上
  49. 一条sql语句执行时间过长你会优化?

    # 使用 explain 分析 SQL语句,是否使用索引
    # 使用 union 联合查询 代替子查询
    # 使用 left join 时,用 小表 left join 大表
  50. 你们数据库不支持emoji表情,你该怎么办?怎么操作?

    将数据库字符集,改成 utf8mb4
  51. 当服务器出现问题,你该如何入手排查问题,排查思路是什么?


MySQL 基础面试题的更多相关文章

  1. 15个 MySQL 基础面试题,DBA 们准备好了吗?

    此前我们已经有发表过Linux 面试基础问答之一.二和三共3篇文章,获得读者的好评,同时我们得到反馈,有些读者希望这种交互式学习方法能够做得更加灵活.心动不如行动,我们这就为您奉上 15个 MySQL ...

  2. 09: mysql基础面试题

    1.uuid和id区别 1)uuid类型是varchar(36),而自增长Id则一般是bigInt类型. 2)相对于bigInt类型的自增长Id,varchar(36)类型的uuid消耗的物理空间更为 ...

  3. Linux运维必会的MySQL企业面试题大全

    (1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...

  4. (转)linux运维必会MySQL企业面试题

    linux运维必会MySQL企业面试题  老男孩教育运维班全体学员MySQL必会企业面试题最实战.最细致.最落地的运维实训基地,老男孩教育连续多年国内平均就业工资最高! 数据库的重要性是所有技术里最核 ...

  5. (转)Linux运维MySQL必会面试题100道

    老男孩教育Linux运维班MySQL必会面试题100道 (1)基础笔试命令考察 (要求:每两个同学一组,一个口头考,一个上机实战作答,每5个题为一组,完成后换位) 1.开启MySQL服务 2.检测端口 ...

  6. Java基础面试题集(一)

    Java基础面试题 一.面向对象编程(OOP) 7 二.常见的Java问题 7 2.1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 7 2.2.JDK和JRE的区别是什么? ...

  7. 2.1 MySQL基础使用

    本文是课上资料的总结非原创没有转载地址 目录 引言 为什么需要数据库? 数据库和应用程序的关系 MySQL基础使用 一.数据库简介 1.1 简介 1.2 常见数据库管理系统 1.3 MySQL卸载 1 ...

  8. 简单说几个MySQL高频面试题

    前言: 在各类技术岗位面试中,似乎 MySQL 相关问题经常被问到.无论你面试开发岗位或运维岗位,总会问几道数据库问题.经常有小伙伴私信我,询问如何应对 MySQL 面试题.其实很多面试题都是大同小异 ...

  9. Java基础面试题(史上最全、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

随机推荐

  1. Windows程序通用自动更新模块(C#,.NET4.5以上)

    本通用自动更新模块适合所有Windows桌面程序的自动更新,不论语言,无论Winform还是wpf. 一.工作流程:1. 主程序A调起升级程序B2. B从服务器获取更新程序列表,打印更新信息.3. B ...

  2. oracle_fdw的安装和使用

    1.下载instant oracle client 下载网址:https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html ...

  3. [Usaco2006 Nov]Corn Fields牧场的安排

    题目描述 Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土 ...

  4. Nginx报504 gateway timeout错误的解决方法(小丑搞笑版。。。)

    一.今天登录我的网站,突然发现报了下面的一个错误: 我的第一反应是:超时了应该是Nginx代理没有设置超时时间,默认的超时时间估计太小了,然后就按照正常的方式用Xshell连接服务器,应该是网络或者是 ...

  5. python Mysql 多条件查询

    做项目时,遇到一场景,前端至少传入一个参数,最多传入四个参数,根据单参数或者组合参数,从数据库筛选数据. 作为一个小白,思考之,从数学的角度,\(C_4^1 + C_4^2+C_4^3+C_4^4=1 ...

  6. linux 文件目录权限

    文件目录权限: 什么是文件权限: 在Linux中,每个文件都有所属的所有者,和所有组,并且规定了文件的所有者,所有组以及其他人对文件的,可读,可写,可执行等权限. 对于目录的权限来说,可读是读取目录文 ...

  7. Spring-01-事务

    Spring事务机制 spring事务机制最重要的两个配置项,隔离级别和传播特性. 1. 隔离级别 隔离级别针对高并发问题导致的数据库丢失更新问题 1.1 数据库的4大基本特征 原子性(Atomic) ...

  8. python 使用函数名的字符串调用函数(4种方法)_black-heart的专栏-CSDN博客 https://blog.csdn.net/mrqingyu/article/details/84403924

    funcs = ['fetch_data_' + i for i in ( 'activities', 'banners', 'server_list')]# from operator import ...

  9. Any race is a bug. When there is a race, the compiler is free to do whatever it wants.

    https://mp.weixin.qq.com/s/pVJiFdDDKVx707eKL19bjA 谈谈 Golang 中的 Data Race 原创 ms2008 poslua 2019-05-13 ...

  10. 并发编程:Actors 模型和 CSP 模型

    https://mp.weixin.qq.com/s/emB99CtEVXS4p6tRjJ2xww 并发编程:Actors 模型和 CSP 模型 ImportNew 2017-04-27