面试MySQL

3 篇文章 0 订阅

1、事务的几个特性

  1. Atomicity原子性:要么全部执行要么全部不执行
  2. Consistency一致性:事务必须保持系统处于一致的状态,不管在任何时间给定的事务有多少。
  3. Isolation 隔离性,在事务正式提交之前,不能把该事务的任何改变提交给其他事务。
  4. Durability持久性:事务完成后,该事务对数据库的 操作便持久的保存在数据库中,不会回滚。

2、MySQL支持几种事务隔离级别?

  • 读未提交:允许脏读,可能会读到其他事务未提交的数据。
  • 读已提交:只能读已提交,Oracle数据库默认
  • 可重复读:指同一个事务内的查询都是事务开始时一致的,Mysql的默认级别。消除了不可重复读,但可能存在幻读。
  • 串行化:完全串行化的读,每次都需要获取表级共享锁,读写相互阻塞。

3、MySQL中MVCC是什么?

MVCC(Mutil-Version Concurrency Control),就是多版本并发控制,mvcc可以认为是行级锁的一个变种,它可以在多种情况下避免加锁,因此开销更低。MVCC的实现大都都实现了非阻塞的读操作,写操作也支持锁定必要的行。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。MVCC可以看作是乐观锁的一种实现方式。在Java编程中,如果把乐观锁看成一个接口,MVCC便是这个接口的一个实现类而已。

4、MySQL的锁级别有哪几种?

行级锁,表级锁,页级锁。

5、MySQL中表锁有,行锁有?

意向共享锁(IS锁),意向排他锁(IX锁),自增锁。MySQL的行锁有共享锁和排他锁。

  • 共享锁:又称读锁,简称S锁,可以读数据但是不能写数据。
  • 排他锁:又称写锁,简称X锁,其他事务不能再读或者写。

6、数据库的三范式是什么?

  1. 第一范式:表中的每一项都是不可分割的原子项
  2. 第二范式:要求实体属性完全依赖于主关键字,所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。
  3. 第三范式:任何非主属性不依赖于其他非主属性。

7、MySQL问题排查都有哪些手段?

  • 使用explain命令查询SQL语句执行计划。
  • 开启慢查询日志,查看慢查询的SQL。
  • 使用show Processlist查看当前的所有连接信息。

8、MySQL常用的引擎

InnoDB引擎,它提供了对数据库的ACID事务的支持,并且还提供了行级锁和外键的约束,他的设计目标就是处理大数据容量的数据库系统,MySQL运行的时候,InnoDB会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎不支持全文搜索,同时启动较慢,它不会保存表的行数,锁的粒度小,写操作不会锁定全表,在并发度较高的场景下使用效率较高。
MyIASM引擎,MySQL的默认引擎,但不提供事务的支持,也不支持行级锁和外键,因此当执行插入和更新语句时,即执行写操作时需要锁定全表,效率会降低。不过和 InnoDB 不同的是,MyIASM 引擎是保存了表的行数,于是当进行 select count(*) from table 语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将 MyIASM 作为数据库引擎的首选。

9、如何做MySQL性能优化?

  1. 选择适合的引擎
  2. 垂直分割表
  3. 避免使用select *
  4. 为搜索字段创建索引。

10、存储过程

存储过程是再大型的数据库中,一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译后永久生效,用户通过给定存储过程的名字并给出参数来执行它,存储过程是数据库中的一个重要对象,在数据量特别庞大的情况下存储过程能够达到倍速的效率提升。
创建存储过程的步骤:

  1. 修改语句结束符

  2. 定义存储过程
    在这里插入图片描述

  3. 将delimiter修改回分号,然后使用call 调用过程。

11、触发器

触发器是一种特殊的存储过程,主要是通过事件来触发而被执行,它可以强化约束,维护数据的完整性和一致性,可以跟踪数据库内的操作而不允许未经许可的更新和变化。触发器不能手动调用,只能系统自动调用。

12、MySQL索引类型

  • 普通索引
  • 唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一;
  • 主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;
  • 组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合;
  • 全文索引:主要用来查询文本中的关键字,而不是直接与索引中的值相比较,mysql中MyISAM支持全文索引而InnoDB不支持;

13、 引擎MykSAM和InnoDB的对比

MylSAMInnoDB
不支持事务,每次查询都是原子的支持事务ACID,支持事务四种隔离级别
不支持行级锁,每次都对整个表加锁支持行级锁,支持并发
存储总行数不存储
一个MYISAM表有三个文件:索引文件、表结构文件、数据文件;存储在一个文件空间
非聚集索引聚集索引

14、什么情况下设置了索引但是无法使用?

  • 模糊查询,如 like %aaa, 但是如果使用like aaa%可以
  • 数据类型出现隐式转换
  • or语句前后没有同时使用
  • 在索引项上运算
  • 此外,还有组合索引多种情况无法使用索引,具体这里不详细说了

15、mysql的日志类型

  • 错误日志
  • 查询日志
  • 慢查询日志
  • 二进制日志
  • 中继日志

16、为什么MySQL索引使用B+树不使用hash表?

  • 1、 哈希表不支持模糊查找,只能遍历整个表,但是B+树通过最左前缀匹配能够快速找到对应的数据。
  • 2、哈希表不支持范围查询
  • 3、3、 如果索引字段相同的过多的话,那么哈希表中它们都映射成相同的位置,形成一条长长的链表,查找时间增加。

17 、MySQL数据并发产生的问题

  • 脏读:事务A读取了B未提交的数据,当B回滚之后,A读到的就是脏数据。
  • 不可重复读:事务A多次读取同一数据,但是每次读到的值不一样,因为事务B多次对数据进行更新和提交。
  • 幻读:事务A多次读取,但是每次读取到的条数不一样。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>