热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mysql经典面试题汇总

Mysql经典面试题汇总,Go语言社区,Golang程序员人脉社

1.ACID 是什么?

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

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

 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;

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

    行锁:   

     两段锁、 一致性非锁定读(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常用命令?

1) 查看系统参数

         使用命令 show variables like "%params%"   ;

         ①检测mysql检测死锁机制是否开启5.7:  

show variables like "%innodb_deadlock_detect%"

  该命令表示如果开启死锁检测机制,那么出现死锁,会随机自动释放一个在死锁的事务。

     

        ② 查询binlog变量

 show variables like "%binlog%";

2)查询数据库事务的隔离级别

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

      

3) explain命令, 解释sql

      例如可以查看查询的语句是否用到索引

    

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

        答:   区别:

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

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

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

9.mysql为什么用B+树做索引?

     答: 

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

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

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

10.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 对结果集作排序。

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

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

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

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

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

12. mysql 的check用法? 

      答:   给字段添加一个约束, 在建表的时候通过check(字段>1) 给字段的值限制范围,即限制字段能为什么值。

13. mysql的binlog日志默认存放在哪儿?

           1) 查看日志文件路径

             show master status

   

    

        2)在my.ini文件中 查看bin_log文件

    we

14. mysql 自增主键出现不连续的原因?

答: mysql自增主键不连续的情况原因有三个: 

     1) 唯一键冲突

     2) 事务回滚

     3) insert...select的时候会出现主键id每次双倍分配导致主键id跳过的问题

      参考博客

 insert into ..select .. 

CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `c` int(11) DEFAULT NULL,
  `d` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `c` (`c`)
) ENGINE=InnoDB;

insert into t1 values(null, 1,1);
insert into t1 values(null, 2,2);
insert into t1 values(null, 3,3);
insert into t1 values(null, 4,4);
create table t2 like t1;
insert into t2(c,d) select c,d from t1;
insert into t2 values(null, 5,5);

select * from t2;

 查询结果为:

15.  mysql的慢查询默认时间为多长? 

        答:  10 S

       

16. 聚簇索引和非聚簇索引的区别是什么? mysql 为什么用自增的id适合作为主键?

        答:  聚簇索引在Mysql里是唯一的,索引和数据存储在一起,非聚簇索引指索引和数据没有放一起,类如书本后的附录目录。

               因为mysql 的自增id , 正好是mysql的聚簇索引的数据的物理存放顺序和索引存放顺序是一致的。只要索引是相邻的,那么在磁盘上的位置也是相邻的,如果不是自增的情况,那么会出现更多次的磁盘io情况。


推荐阅读
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文详细介绍了数据库并发控制的基本概念、重要性和具体实现方法。并发控制是确保多个事务在同时操作数据库时保持数据一致性的关键机制。文章涵盖了锁机制、多版本并发控制(MVCC)、乐观并发控制和悲观并发控制等内容。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在HTML布局中,即使将 `top: 0%` 和 `left: 0%` 设置为元素的定位属性,浏览器中仍然会出现空白填充。这个问题通常与默认的浏览器样式、盒模型或父元素的定位方式有关。为了消除这些空白,可以考虑重置浏览器的默认样式,确保父元素的定位方式正确,并检查是否有其他CSS规则影响了元素的位置。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 本文介绍了如何在 Vue 3 组合 API 中正确设置 setup() 函数的 TypeScript 类型,以避免隐式 any 类型的问题。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
author-avatar
jtzhn_146_607
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有