1 Star 0 Fork 31

阿明 / Ebooks

forked from Java精选 / Ebooks 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
最新2021年MySQL面试题及答案汇总版.md 9.55 KB
一键复制 编辑 原始数据 按行查看 历史

最新2021年MySQL面试题及答案汇总版

全部面试题答案,更新日期:01月30日,直接下载吧!

下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF

MySQL

题1:MySQL 中 BLOB 和 TEXT 有什么区别?

BLOB是一个二进制对象,可以容纳可变数量的数据。TEXT是一个不区分大小写的BLOB。

BLOB和TEXT类型之间的唯一区别在于对BLOB值进行排序和比较时区分大小写,对TEXT值不区分大小写。

题2:MySQL 中事务回滚机制原理?

事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销。

要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完,可能第二个表修改过程中出现了异常而没能修改,此时就只有第二个表依旧是未修改之前的状态,而第一个表已经被修改完毕。而当把它们设定为一个事务的时候,当第一个表修改完,第二表修改出现异常而没能修改,第一个表和第二个表都要回到未修改的状态,这就是所谓的事务回滚。

题3:MySQL 中创建索引有三种方式?

执行CREATE TABLE时创建索引

CREATE TABLE `employee` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `date` datetime DEFAULT NULL,
  `sex` int(1) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

使用ALTER TABLE命令添加索引

ALTER TABLE table_name ADD INDEX index_name (column);

使用CREATE INDEX命令创建

CREATE INDEX index_name ON table_name (column);

题4:SQL 语句中使用 like 如何避免索引失效?

使用like模糊查询全部字段的的情况

1)当两边使用%时,结果是全表扫描,索引失效。

2)当左边使用%时,结果是全表扫描,索引失效。

3)当右边使用%时,结果是range,索引生效。

上述三种情况当使用like模糊查询所有字段,不包含在索引列中的字段时,只有%放在右边索引才会生效。

注意尽量避免SELECT *查询,而是一一罗列出所需要查询的字段,因为可能搞不好SELECT *查询多出一个字段,就导致全表扫描。

覆盖索引

如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。

只扫描索引而无需回表的优点:

1)索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。

2)因为索引是按照列值顺序存储的,所以对于IO密集的范围查找会比随机从磁盘读取每一行数据的IO少很多。

3)一些存储引擎如myisam在内存中只缓存索引,数据则依赖于操作系统来缓存,因此要访问数据需要一次系统调用。

4)innodb的聚簇索引,覆盖索引对innodb表特别有用。(innodb的二级索引在叶子节点中保存了行的主键值,所以如果二级主键能够覆盖查询,则可以避免对主键索引的二次查询)

覆盖索引必须要存储索引列的值,而哈希索引、空间索引和全文索引不存储索引列的值,所以mysql只能用B-tree索引做覆盖索引

题5:MySQL 事务都有哪些特性?

事务的四大特性:

1 、原子性

事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做

2 、一致性

事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。

3 、隔离性

一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

4 、持续性

也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

题6:B+ 树索引和哈希索引有什么区别?

B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接,是有序的。

哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可,是无序的。

题7:key 和 index 有什么区别?

key是数据库的物理结构,它包含两层意义和作用,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。包括primary key、unique key、foreign key等。

index是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。索引要分类的话,分为前缀索引、全文本索引等;

题8:MySQL 中如何获取当前日期?

SELECT CURRENT_DATE();

题9:组合索引是什么?为什么需要注意组合索引中的顺序?

组合索引是指用户可以在多个列上建立索引,这种索引叫做组合索引。

因为InnoDB引擎中的索引策略的最左原则,所以需要注意组合索引中的顺序。

题10:MySQL 中 having 和 where 有什么区别?

having子句和where都是设定条件筛选的语句。

其中having与where的区别主要有以下几方面:

1、having是在分组后对数据进行过滤,而where是在分组前对数据进行过滤;

2、having后面可以使用聚合函数,而where后面不可以使用聚合。

3、在查询过程中执行顺序:from>where>group(含聚合)>having>order>select。

4、聚合语句(sum、min、max、avg、count)要比having子句优先执行,而where子句在查询过程中执行优先级别优先于聚合语句(sum、min、max、avg、count)。

where子句

select sum(num) as rmb from order where id>10

只有先查询出id大于10的记录才能进行聚合语句

having子句

select reports,count(*)  from employees group by reports having count(*) > 4

having条件表达示为聚合语句,having子句查询过程执行优先级别低于聚合语句。如果把上面的having换成where则会出错,统计分组数据时用到聚合语句。

对分组数据再次判断时要用having。如果不用这些关系就不存在使用having。直接使用where就行了。having是用来弥补where在分组数据判断时的不足。所以where执行优先级别要快于聚合语句。

聚合函数

例如SUM、COUNT、MAX、AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。

having子句可以直接筛选成组后的各组数据,也可以在聚合后对组记录进行筛选,而where子句在聚合前先筛选记录,也就是说作用在group by子句和having子句前。

题11:mysql-中-text-数据类型的最大长度

题12:业务实践中如何优化-mysql

题13:如何使用-sql-语句实现不同状态列转行显示订单数量

题14:视图常见使用场景有哪些

题15:mysql-中自增主键可能会遇到什么问题

题16:mysql-中-innodb-引擎-4大特性了解过吗

题17:mysql-中如何找出最后一次插入时分配的自动增量

题18:mysql-中什么是联合索引

题19:什么是视图

题20:mysql-中都有哪些触发器

题21:触发器的使用场景有哪些

题22:mysql-中如何去掉重复数据记录

题23:mysql-中-sql-约束有哪几种

题24:mysql-假设一天几万以上的增量预计运维三年怎么优化

题25:数据库中什么是事务

大厂面试题

大厂面试题

大厂面试题

Java
1
https://gitee.com/AminDev/ebooks.git
git@gitee.com:AminDev/ebooks.git
AminDev
ebooks
Ebooks
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891