mysql常见面试题

1.  ACID 是什么? 

  答:  mysql的ACID是指事务的 原子性,一致性,隔离性,持久性。 其中原子性是基于 Redo/undo log机制来实现的, Redo log 记录的是事务更新后的记录值,undo log 记录的是事务更新后的记录,更新失败后,就可以根据undo log来进行回滚。

 

2. mysql的索引类型包含哪几种?

mysql常见面试题_第1张图片

 1)fulltext 索引

   适用于大文件text类型以及大小超过text类型的字段。 

2)  NORMAL普通索引

     使用经常使用的字段或者当关联表的一些字段。

3) UNIQUE 唯一性索引

    当有多个字段一起表示唯一时,可以使用唯一性索引进行约束,比如用户表里的, 用户名和账号需要唯一并且不为空,那么就将 这2个字段设置一个唯一性的索引。

 

 

3. mysql的explain关键字用法?

      一般用于在查询前添加explain,用于解释查询出来的语句包含的信息。

 

4. mysql的binLog是什么? 

     binlog是mysql用于数据收集和数据恢复的日志管理工具。

 

5. 你知道mysql的最左索引匹配规则嘛?

     答:  当有多个字段共同做为 索引时,如(a,b,c),如果说只用到了b,c那么最左索引匹配就会认为该索引无效,如果用到了a,c或者a,b,那么索引就会生效。

 

6.  mysql的锁有哪几种?

     答: 根据加锁的范围,可分为全局锁(全库逻辑备份)、表级锁(表锁(表记录)、元数据锁MDL(修改表结构))、行锁。

     全局锁:  给整个数据库加一个全局的读锁,表示只有当前线程能够读取到该数据库,其他线程不能进行读取和修改。

      格式:   Full tables with read lock

     表级锁: 

     表锁和元数据锁(MDL)

      格式:   lock tables 表名 read;

mysql常见面试题_第2张图片

    设置表锁后,不能对该表进行修改操作。 

    行锁:   

     两段锁、 一致性非锁定读(MVCC多版本并发控制, innodb会用快照的形式保存历史信息)、一致性锁定读(可以解决幻读问题)。

     一致性锁定读:

       select .. for update    

       select ... lock in share mode

        可以通过加一致性锁定读,当2次查询期间有insert语句过来的时候,会进入到阻塞状态,直至读取完毕后,再insert。

  • Record Lock:单个行记录上的锁
  • Gap Lock:间隙锁,锁定一个范围,但不包含记录本身
  • Next-Key Lock:Gap Lock+Record Lock,锁定一个范围,并且锁定记录本身

7. mysql常用命令?

     查看系统参数:   

    检测是否死锁 检测死锁机制是否开启5.7:  show variables like "%innodb_deadlock_detect%";   该命令表示如果开启死锁检测机制,那么出现死锁死,会随机自动释放一个在死锁的事务。

     mysql常见面试题_第3张图片

    查询数据库事务的隔离级别:      select @@transaction_isolation     mysql默认的事务隔离级别为: 可重复读。

      mysql常见面试题_第4张图片

   使用explain来解释select命令,可以包含是否用到索引:

    

 

八、 mysql的MYISAM存储引擎和Innodb存储引擎有什么区别,哪个性能好?

        答:   区别:

               1) myisam存储引擎不支持事务,对于不需要事务的操作时,myisam的查询和插入的性能比innodb快的多。

               2)  myisam 不支持外键,innodb支持外键。

               3) myisam 只支持表级锁,Innodb支持表级锁(表锁和元数据锁)和行锁(两阶段锁、一致性非锁定读(MVCC)、一致性锁定读(select … for update,select … lock in share mode))。

 

九、mysql为什么用B+树做索引?

     答: 

     1) B+树是一种排序好的数据结构。

      2)与普通的二叉树相比,B+树只在叶子节点做存储,在同样的内存下,B+树叶子能够存储更多的节点数量,遍历起来更快速方便。

      3) B+树是一一种平衡的多叉树,能够做更少的磁盘I/O, 另外叶子节点也可以连接起来,加快遍历。

 

十、mysql的 sql执行顺序是怎么样的?

    答:   如: select * from A  left join B on A.c=B.d  where A.e="1" order by A.g;

         第一步先将A表和B表做笛卡尔乘积。

         第二步再通过on将上面的笛卡尔乘积的结果集进行第一次筛选。

         第三步 将A表多余的行,即没有匹配到B表的行接入到上面筛选的On结果集后,空的用null填充。

         第四步用where对结果集进行筛选。

         第五步再通过order by 对结果集作排序。

十一、数据库的事务隔离级别有哪几种方式?分别有什么优缺点? 

   答:  1. 读未提交,一个事务能够读取到另一个事务未提交的记录。   

          2. 读已提交,事务只能读取到已经提交的记录, 会出现不可重复读的问题,即同一个事务多次读取到的结果是不相同的。

          3. 可重复读,即同一个事务,多次查询读取的记录是 相同的,但是会出现幻读的问题,即在读取结果的一瞬间,另外一个事务突然向数据库里插入了一条记录,那么前面的事务好像多读取了一条记录的问题。

           4.可串行化,是数据库的隔离的最高级别,不会出现脏读、不可重复读、幻读的问题,但性能比较差。

你可能感兴趣的:(mysql,面试题集锦)