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

相关文章

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

SQL注入漏洞扫描之sqlmap详解

《SQL注入漏洞扫描之sqlmap详解》SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入... 目录what支持类型how---less-1为例1.检测网站是否存在sql注入漏洞的注入点2.列举可用数据库3.列举数据库

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

Mysql DATETIME 毫秒坑的解决

《MysqlDATETIME毫秒坑的解决》本文主要介绍了MysqlDATETIME毫秒坑的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 今天写代码突发一个诡异的 bug,代码逻辑大概如下。1. 新增退款单记录boolean save = s

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d