2020年-MySQL面试题整理(上)

1.MySQL中事务默认隔离级别是什么?

  • REPEATABLE READ (可重复读)

2.MySQL中有哪几种锁? 你能列举死锁的场景吗?

锁类型 开销 加锁范围 是否会出现死锁 并发性能
表 级 锁 开销最小的策略,加锁速度快 锁定整张表 不会出现死锁 并发度最低
行 级 锁 开销大,加锁速度慢 锁定一行数据 会出现死锁 并发读最 高
页 级 锁 介于表锁和行锁之间 锁定一页数据 会出现死锁 介于表锁和行锁之间
死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的 现象。多个事
务同时锁定同一个资源时,也会产生死锁。如下:
事 务 1 :              
    	START TRANSACTION;              
		UPDATE account SET balance= balance-1000 WHERE card_id=1;              
		UPDATE account SET balance= balance+1000 WHERE card_id=2;              			
		COMMIT;       
事 务 2 :              
		START TRANSACTION;              
		UPDATE account SET balance= balance-1000 WHERE card_id=2;              
		UPDATE account SET balance= balance+1000 WHERE card_id=1;              
		COMMIT;
    如果刚好两个事务都执行了第一个条update语句,更新了一行数据,同时也锁定了该行数据。接着两 个事务都
    尝试去执行第二条update语句,发现该行数据已经被对方锁定,然后两个事务都等待对方释放锁, 同时又持有
    对方需要的锁,则陷入了死锁。

3.简单描述MySQL的MVCC是什么

  • MVCC是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保存行的过期时间(或删除时间)。当然存储的并不是实际的时间值,而是系统版本号(system version number)。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。

4.MySQL中索引有哪几种类型?

  • Mysql中根据各个索引的特性主要分为:普通索引、唯一索引、主键索引、组合索引、全文索引。

5.你能说说InnoDB和MyISAM存储引擎的区别吗?

  • InnoDB
    – 支持事务,支持事务的四种隔离级别。
    – 支持行级锁,不支持表级锁。
    – InnoDB支持外键。

一 个 InnoDb 引 擎 存 储 在 一 个 文 件 空 间 ( 共 享 表 空 间 , 表 大 小 不 受 操 作 系 统 控 制 ,
一个表可能分布在多个文件里),也有可能为多个(设置为独立表空,表大小受
操 作 系 统 文 件 大 小 限 制 , 一 般 为 2G) , 受 操 作 系 统 文 件 大 小 的 限 制 ;
主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存
储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅
索 引 ; 最 好 使 用 自 增 主 键 , 防 止 插 入 数 据 时 , 为 维 持 B+树 结 构 , 文 件 的 大 调 整 。

  • MyISAM
    –不支持事务。
    –支持表级锁,不支持行级锁。
    –MyISAM引擎不支持外键。

一 个 MYISAM 表 有 三 个 文 件 : 索 引 文 件 、 表 结 构 文 件 、 数 据 文 件 ;
采用菲聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引
基本一致,但是辅索引不用保证唯一性。

6.MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及之间的区别?

SQL 标 准 定 义 的 四 个 隔 离 级 别 为 :

  • read uncommited : 读未提交。多事务场景,允许一个事务读到另一个事务未提交的数据。
  • read committed: 读提交。多事务场景,不允许一个事务读到另一个事务未提交的数据。
  • repeatable read: 可重复读。一个事务操作时,不允许其他事务修改当前事务操作的数据。
  • serializable : 序列化读,也加串行读。事务是串行的。

7.myisamchk 是用来做什么的?

  • 它主要用于压缩MyISAM表,减少磁盘或内存的占用。

MyISAM Static 和 MyISAM Dynamic 有 什 么 区 别 ?
在 MyISAM Static 上 的 所 有 字 段 有 固 定 宽 度 。 动 态 MyISAM 表 将 具 有 像 TEXT,
BLOB 等 字 段 , 以 适 应 不 同 长 度 的 数 据 类 型 。
MyISAM Static 在 受 损 情 况 下 更 容 易 恢 复 。

8.如何查看指定表上定义了哪些索引?

  • SHOW INDEX FROM 表名;

9. 主键字段类型为bigint ,设置为 AUTO INCREMENT 时 , 如果达到最大值会发生什么?

  • 任何进一步的插入都将产生错误,因为密钥已被使用。

ERROR 1467 (HY000): Failed to read auto-increment value from storage engine mysql>

10. MySQL中的慢查询日志作用是什么?

-mysql的慢查询日志是msyql提供的一种日志记录,它用来记录在msyql中响应时间超过阀值的语句,比如具体指运行时间超过long_query_time值的sql,则会被记录到慢查询日志中。

未完… 资料整理自网络各处

你可能感兴趣的:(数据库)