1 / 7
文档名称:

MySQL常见面试题.docx

格式:docx   大小:23KB   页数:7页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

MySQL常见面试题.docx

上传人:kunpengchaoyue 2022/5/21 文件大小:23 KB

下载得到文件列表

MySQL常见面试题.docx

文档介绍

文档介绍:什么是索引?
索引是一种数据结构,可以帮助我们快速的进行数据的查找。
索引是个什么样的数据结构呢?
索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎左边是通配符。类似于%aaa'。
•当mysql分析全表扫描比使用索引快的时候不使用索引。
•当使用联合索引,前面一个条件为范围查询,后面的即使符合最左前缀原则,也无法使用索引。
以上情况,MySQL无法使用索引。
事务相关
1•什么是事务?
理解什么是事务最经典的就是转账的栗子,相信大家也都了解,这里就不再说一遍了。
事务是一系列的操作,他们要符合ACID特性。最常见的理解就是:事务中的操作要么全部成功,要么全部失败。但是只是这样还不够的。
?可以详细说一下吗?
A=Atomicity
原子性,就是上面说的,要么全部成功,要么全部失败。不可能只执行一部分操作。
C=Consistency
系统(数据库)总是从一个一致性的状态转移到另一个一致性的状态,不会存在中间状态。
I=Isolation
隔离性:通常来说:一个事务在完全提交之前,对其他事务是不可见的。注意前面的通常来说加了红色,意味着有例外情况。
D=Durability
持久性,一旦事务提交,那么就永远是这样子了,哪怕系统崩溃也不会影响到这个事务的结果。
3•同时有多个事务在进行会怎么样呢?
多事务的并发进行一般会造成以下几个问题:
•脏读:A事务读取到了B事务未提交的内容,而B事务后面进行了回滚。
•不可重复读:当设置A事务只能读取B事务已经提交的部分,会造成在A事务内的两次查询,结果竟然不一样,因为在此期间B事务进行了提交操作。
•幻读:A事务读取了一个范围的内容,而同时B事务在此期间插入了一条数据。造成"幻觉"。
4•怎么解决这些问题呢?MySQL的事务隔离级别了解吗?
MySQL的四种隔离级别如下:
•未提交读(READUNCOMMITTED)
这就是上面所说的例外情况了,这个隔离级别下,其他事务可以看到本事务没有提交的部分修改。因此会造成脏读的问题(读取到了其他事务未提交的部分,而之后该事务进行了回滚)。
这个级别的性能没有足够大的优势,但是又有很多的问题,因此很少使用。
•已提交读(READCOMMITTED)
其他事务只能读取到本事务已经提交的部分。这个隔离级别有不可重复读的问题,在同一个事务内的两次读取,拿到的结果竟然不一样,因为另外一个事务对数据进行了修改。
•REPEATABLEREAD(可重复读)
可重复读隔离级别解决了上面不可重复读的问题(看名字也知道),但是仍然有一个新问题,就是幻读,当你读取id>10的数据行时,对涉及到的所有行加上了读锁,此时例外一个事务新插入了一条
id=ll的数据,因为是新插入的,所以不会触发上面的锁的排斥,那么进行本事务进行下一次的查询时会发现有一条id=ll的数据,而上次的查询操作并没有获取到,再进行插入就会有主键冲突的问题。
SERIALIZABLE(可串行化)
这是最高的隔离级别,可以解决上面提到的所有问题,因为他强制将所以的操作串行执行,这会导致并发性能极速下降,因此也不是很常用。