Mysql面试夺命18问

2024-05-15 21:20
文章标签 mysql 面试 18 database 夺命

本文主要是介绍Mysql面试夺命18问,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录


1.简要说明一下数据库范式

  • 第一范式: 属性不可再分.
  • 第二范式: 在一范式的基础上, 要求数据库表中的每个实例或行必须可以被惟一地区分. 通常需要为表加上一个列, 以存储各个实例的惟一标识. 这个惟一属性列被称为主关键字或主键.
  • 第三范式: 在二范式的基础上, 要求一个数据库表中不包含已在其它表中已包含的非主关键字信息. 所以第三范式具有如下特征:1). 每一列只有一个值. 2). 每一行都能区分. 3). 每一个表都不包含其他表已经包含的非主关键字信息.

2.一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15、16、17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15?

  • 这条记录的ID是18。因为MySQL的自增主键是基于已使用的最大值来确定的,即使你删除了某些记录,已使用的最大值(在这个例子中是17)仍然会被保留,所以下一条记录的ID会是18。

3.主键和候选键有什么区别?

  • 主键是表中的唯一标识符,用于唯一确定表中的每一行。一个表只能有一个主键。候选键也是能唯一确定表中每一行的列或列的组合,但一个表可以有多个候选键。
  1. 什么是事务?MySQL中如何支持事务?
  • 事务是一系列操作,这些操作要么完全执行,要么完全不执行,以确保数据库的完整性。MySQL通过InnoDB存储引擎支持事务,提供了ACID(原子性、一致性、隔离性、持久性)的特性。
  1. LIKE声明中的%和_是什么意思?
  • %代表零个、一个或多个字符,而_代表一个单一的字符。
  1. 如何在Unix和Mysql时间戳之间进行转换?
  • 可以使用MySQL的日期和时间函数来进行转换,如FROM_UNIXTIME()和UNIX_TIMESTAMP()。
  1. 我们如何得到受查询影响的行数?
  • 可以使用ROW_COUNT()函数来获取受上一个SQL语句影响的行数。
  1. Mysql查询是否区分大小写?
  • 这取决于数据库的字符集和校对规则。在默认情况下,MySQL的查询是不区分大小写的,但可以通过设置校对规则来改变这一行为。
  1. LIKE和REGEXP操作有什么区别?
  • LIKE主要用于简单的模式匹配,而REGEXP用于更复杂的正则表达式匹配。
  1. 如何在mysql中运行批处理模式?
  • MySQL本身并不直接支持批处理模式,但你可以通过编写脚本或使用命令行工具来批量执行SQL语句。
  1. MyISAM和InnoDB的区别是什么?
  • 图片InnoDB支持事务, MyISAM不支持.
  • InnoDB支持行级锁, MyISAM支持表级锁.
  • 图片InnoDB支持多版本并发控制(MVVC), MyISAM不支持.
  • InnoDB支持外键, MyISAM不支持.
  • 图片MyISAM支持全文索引, InnoDB部分版本不支持(但可以使用Sphinx插件)
  1. 如何优化DISTINCT?
  • 优化DISTINCT的方法包括确保查询中使用的列都有索引、减少查询中涉及的列数、避免在DISTINCT查询中使用子查询等。
  1. MySQL数据库cpu飙升到100%的话怎么处理?
  • 当CPU使用率飙升至100%时,我们首先需要利用操作系统的top命令来快速识别是否由mysqld进程引发的高占用情况。
  • 如果mysqld并非罪魁祸首,那么我们需进一步查找其他占用资源较高的进程,并采取相应的处理措施。
  • 如果是 mysqld 造成的, show processlist,看看里面跑的 session 情况,是不是有消耗资源的 sql 在运行。找出消耗高的 sql,看看执行计划是否准确,index 是否缺失,或者实在是数据量太大造成。
  • 一般来说,肯定要 kill 掉这些线程(同时观察 cpu 使用率是否下降), 等进行相应的调整(比如说加索引、改 sql、改内存参数)之后,再重新跑这些 SQL。也有可能是每个 sql 消耗资源并不多,但是突然之间,有大量的 session 连进来导致 cpu 飙升, 这种情况就需要跟应用一起来分析为何连接数会激增, 再做出相应的调整,比如说限制连接数等。
  1. MYSQL主从复制解决了哪些问题?
  • 主从复制的作用是:主数据库出现问题,可以切换到从数据库。可以进行数据库层面的读写分离。可以在从数据库上进行日常备份。
  • 数据分布:随意开始或停止复制,并在不同地理位置分布数据备份
  • 负载均衡:降低单个服务器的压力
  • 高可用和故障切换:帮助应用程序避免单点失败
  • 升级测试:可以用更高版本的MySQL作为从库
  1. MySQL的索引是什么,它有什么作用?如何查看?
  • 索引是一种数据结构,它可以帮助数据库系统快速检索数据,而无需扫描整个表。通过索引,数据库可以快速定位到表中的特定记录,从而提高查询速度。可以使用SHOW INDEX FROM 表名;命令来查看表的索引信息。
  1. 什么是死锁?怎么解决?
    死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。

常见的解决死锁的方法:

  • 如果不同程序会并发存取多个表, 尽量约定以相同的顺序访问表,可以大大降低死锁机会。
  • 同一个事务,尽可能做到一次锁定所需的所有资源,减少死锁产生概率;
  • 对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率;
  1. 如何优化MySQL的查询性能?
  • 优化MySQL查询性能的方法有很多,包括:使用合适的索引、避免全表扫描、优化查询语句、减少连接操作、使用缓存等。
  1. 什么是SQL注入,如何防止?
  • SQL注入是一种攻击手段,攻击者通过在SQL查询语句中插入恶意代码来篡改原始语句的结构和意图。为了防止SQL注入,可以使用预编译语句(Prepared Statements)或参数化查询,避免在代码中直接拼接SQL语句。

这篇关于Mysql面试夺命18问的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992957

相关文章

通过ibd文件恢复MySql数据的操作方法

《通过ibd文件恢复MySql数据的操作方法》文章介绍通过.ibd文件恢复MySQL数据的过程,包括知道表结构和不知道表结构两种情况,对于知道表结构的情况,可以直接将.ibd文件复制到新的数据库目录并... 目录第一种情况:知道表结构第二种情况:不知道表结构总结今天干了一件大事,安装1Panel导致原来服务

mysql关联查询速度慢的问题及解决

《mysql关联查询速度慢的问题及解决》:本文主要介绍mysql关联查询速度慢的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql关联查询速度慢1. 记录原因1.1 在一次线上的服务中1.2 最终发现2. 解决方案3. 具体操作总结mysql

Linux搭建Mysql主从同步的教程

《Linux搭建Mysql主从同步的教程》:本文主要介绍Linux搭建Mysql主从同步的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux搭建mysql主从同步1.启动mysql服务2.修改Mysql主库配置文件/etc/my.cnf3.重启主库my

MySql中的数据库连接池详解

《MySql中的数据库连接池详解》:本文主要介绍MySql中的数据库连接池方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql数据库连接池1、概念2、为什么会出现数据库连接池3、原理4、数据库连接池的提供商5、DataSource数据源6、DBCP7、C

MySQL的隐式锁(Implicit Lock)原理实现

《MySQL的隐式锁(ImplicitLock)原理实现》MySQL的InnoDB存储引擎中隐式锁是一种自动管理的锁,用于保证事务在行级别操作时的数据一致性和安全性,本文主要介绍了MySQL的隐式锁... 目录1. 背景:什么是隐式锁?2. 隐式锁的工作原理3. 隐式锁的类型4. 隐式锁的实现与源代码分析4

MySQL中Next-Key Lock底层原理实现

《MySQL中Next-KeyLock底层原理实现》Next-KeyLock是MySQLInnoDB存储引擎中的一种锁机制,结合记录锁和间隙锁,用于高效并发控制并避免幻读,本文主要介绍了MySQL中... 目录一、Next-Key Lock 的定义与作用二、底层原理三、源代码解析四、总结Next-Key L

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

Mysql中InnoDB与MyISAM索引差异详解(最新整理)

《Mysql中InnoDB与MyISAM索引差异详解(最新整理)》InnoDB和MyISAM在索引实现和特性上有差异,包括聚集索引、非聚集索引、事务支持、并发控制、覆盖索引、主键约束、外键支持和物理存... 目录1. 索引类型与数据存储方式InnoDBMyISAM2. 事务与并发控制InnoDBMyISAM

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常