首页 > 数据库 >MySQL面试题系列-10

MySQL面试题系列-10

时间:2024-04-06 15:01:55浏览次数:26  
标签:10 面试题 数据库 查询 索引 str MySQL 字符串

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。

MVCC解决的问题

MVCC(多版本并发控制)主要解决了事务并发执行时的一致性问题,包括脏读、不可重复读和幻读等
具体来说,MVCC通过以下方式解决了这些问题:

  1. 脏读(Dirty Read):在没有使用MVCC的情况下,一个事务可能会读取到另一个尚未提交事务的修改结果,这被称为脏读。如果后者回滚,前者读取的数据就会是错误的。MVCC通过为每个读操作创建数据的快照来避免脏读,确保事务总是读取到一致的数据版本。
  2. 不可重复读(Non-Repeatable Read):指的是在同一个事务内,连续两次读取同样的记录可能会得到不同的数据,因为其他并发事务可能在此期间修改了这些记录。MVCC允许事务在开始时建立一个快照,在整个事务过程中都基于这个快照进行读取,从而保证可重复读。
  3. 幻读(Phantom):指当用户读取某些行后,另外的事务插入了一些新的行,导致后续的读取发现了之前未出现的额外行。MVCC通常结合行锁使用来解决幻读问题,确保事务在读取期间不会受到其他事务插入新行的影响。

总的来说,MVCC的核心优势在于提高了数据库在高并发环境下的性能和一致性,它允许多个事务并发地读写数据而不会产生冲突,这对于支持大规模并发处理的现代数据库系统至关重要。

唯一索引比普通索引快吗?

唯一索引在某些情况下可能比普通索引更快,但这取决于具体的使用场景和数据特性。唯一索引和普通索引都是数据库中用于加速查询操作的数据结构,它们通常都使用B-tree结构实现,具有相同的时间复杂度O(log n)。然而,由于唯一索引要求索引列中的值必须是唯一的,这为数据库提供了额外的信息,可以优化某些特定的查询操作。
以下是一些唯一索引可能比普通索引快的情况:

  1. 数据唯一性保证:如果业务逻辑要求某个字段的值必须是唯一的,那么使用唯一索引可以在数据库层面强制执行这一约束,同时在查询时也能利用这一点来加速查询过程。
  2. 查询优化:对于涉及唯一索引列的查询,数据库可以更快地定位到唯一的行,因为它知道索引键值对应的行是唯一的。这意味着在执行查找、插入或更新操作时,唯一索引可能会提供更好的性能。
  3. 减少磁盘I/O:由于唯一索引确保了每个索引键值的唯一性,因此在处理涉及唯一索引列的查询时,数据库可以更少地访问磁盘,从而减少I/O开销。
  4. 避免额外检查:在使用普通索引时,如果存在重复值,数据库可能需要进行额外的检查以确保找到正确的行。而唯一索引由于其唯一性,可以避免这种额外的检查。

总的来说,如果业务逻辑不要求数据的唯一性,或者查询模式不需要唯一索引带来的优化,那么普通索引可能是一个更合适的选择。因此,在选择唯一索引还是普通索引时,应该根据实际的业务需求和查询模式来决定。

A,B,C三个字段组成联合索引,AB,AC,BC三种情况下查询是否能命中索引?

当A,B,C三个字段组成联合索引时,在查询中是否能命中索引取决于查询条件是如何利用这个联合索引的。具体如下:

  1. AB查询:能够使用索引,因为查询涉及联合索引的最左前缀。数据库系统会从索引的第一个字段(A)开始匹配,然后是第二个字段(B),这符合最左匹配原则。
  2. AC查询:只有A字段能使用索引,而C字段不能,因为没有包含联合索引中的B字段。在这种情况下,数据库系统仅对索引的第一个字段(A)进行匹配,C字段的查询将不会使用到索引的优势。
  3. BC查询:不能使用索引,因为不符合最左匹配原则。联合索引必须从最左侧开始使用,即第一个字段(A)开始,然后是第二个字段(B),以此类推。由于跳过了第一个字段(A),索引将不会被使用。

综上所述,在使用联合索引时,查询条件需要遵循索引列的顺序,并且至少包含最左侧的列以确保高效地利用索引。如果查询条件没有涵盖联合索引的全部或者最左侧列,那么索引可能部分有效或者完全无效。

MySQL中有哪几种锁?

MySQL中的锁主要分为三类:全局锁、表级锁和行级锁。具体如下:

  1. 全局锁:全局锁是对整个数据库实例加锁,一旦加锁,整个数据库实例将处于只读状态。这种锁会阻塞后续的所有数据修改语言(DML)的写操作、数据定义语言(DDL)语句以及已经更新操作的事务提交语句。全局锁的典型使用场景是在做全库的逻辑备份时,通过对所有的表进行锁定来获取一致性视图,从而保证数据的完整性。
  2. 表级锁:表级锁是每次操作锁住整张表。在执行写操作的时候,会锁定整个表,使得其他线程无法进行写入或读取该表中被锁定部分的数据。这种锁适用于对整张表的大量操作,可以避免在操作过程中发生的数据不一致问题。
  3. 行级锁:行级锁是MySQL中最细粒度的锁,它允许每次操作只锁住对应的行数据。行级锁能够提供更高的并发性能,因为它只锁定需要操作的记录,其他不相关的记录仍然可以被并发访问。这种锁适用于高并发的场景,尤其是当多个事务同时操作数据库中不同的行时。

总的来说,每种锁都有其适用的场景,全局锁适合执行全库操作,表级锁适合对整张表的操作,而行级锁则适合高并发且需要精确锁定个别记录的场景。在设计数据库系统时,应根据具体的业务需求和并发情况选择合适的锁策略,以平衡系统的并发性能和数据一致性。

MySQL的常用函数有哪些

MySQL中的常用函数主要分为四大类:字符串函数、数值函数、日期和时间函数以及系统信息函数。

  1. 字符串函数:这类函数主要用于处理字符串数据,包括但不限于以下几种:
  • CONCAT(str1, str2...strn):连接多个字符串为一个完整的字符串。
  • INSERT(str, x, y, instr):将字符串str从第x位开始的y个字符长的子串替换为字符串instr
  • LOWER(str):将字符串str中的所有字母转换为小写。
  • UPPER(str):将字符串str中的所有字母转换为大写。
  • LEFT(str, x):返回字符串str最左边的x个字符。
  • RIGHT(str, x):返回字符串str最右边的x个字符。
  • LPAD(str, n, pad):使用字符串pad对字符串str的左边进行填充,直到长度为n个字符。
  • RPAD(str, n, pad):使用字符串pad对字符串str的右边进行填充,直到长度为n个字符。
  • LTRIM(str):去掉字符串str左边的空格。
  • RTRIM(str):去掉字符串str右边的空格。
  • REPEAT(str, x):返回字符串str重复x次的结果。
  1. 数值函数:用于处理数值数据,例如求和、平均值等。
  2. 日期和时间函数:用于处理日期和时间类型的数据,如提取日期组件、日期格式化等。
  3. 系统信息函数:提供数据库系统的相关信息,如当前用户、版本信息等。

这些函数在SQL查询中非常实用,可以帮助用户更加灵活地处理和操作数据。掌握这些常用函数的使用,可以有效地提高数据库查询和数据处理的效率。

标签:10,面试题,数据库,查询,索引,str,MySQL,字符串
From: https://blog.csdn.net/m0_71566302/article/details/137428740

相关文章

  • MySQL面试题系列-11
    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。Mysql的char和varchar的区别?My......
  • 【附源码】计算机毕业设计在线教育平台(java+springboot+mysql+mybatis+论文)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义在数字化时代背景下,传统教育模式正在逐渐向在线教育转型。一个高效的在线教育平台不仅可以突破时间和空间的限制,提供灵活多样的学习方式,还能够实现个性化教育资源......
  • ZCMU-1033
    我觉得这位大佬说的已经很好了,可以直接看她的思路了;大佬思路但是她的代码没有考虑到1111的情况,代码思路这个是可以的很长且没有注释;#include<bits/stdc++.h>usingnamespacestd;longlongd[40][40];longlongc[40][40];longlonga[40];longlongx,y;intk,b;......
  • (毕业设计)基于Java+Vue+Mysql的WMS仓库管理系统
     前言: WMS(WarehouseManagementSystem)仓库管理系统是一个用于优化仓库操作、提高效率和准确性的软件解决方案。以下是针对列出的WMS仓库管理系统的各个部分的简要描述:1.订单管理订单管理是WMS的核心功能之一,涉及处理、跟踪和完成客户订单。这包括:订单录入:手动或自动......
  • (毕业设计)基于Java+SpringBoot+Vue+Mysql的智慧园区管理系统
     前言:智慧园区管理系统是一个集成了园区管理、缴费服务、退款功能、缴费提醒、抄表功能、打印功能、统计报表和协同办公等多个模块的综合性系统。以下是对每个模块及其子功能的简要说明:园区管理:园区管理:对整个园区进行宏观管理,包括园区的基本信息、资源配置、设施维护等。......
  • 2024年150道高频Java面试题(十八)
    35.List、Set、Map之间的区别是什么?List、Set和Map是Java中CollectionFramework中的三大接口,它们用于存储集合数据,但是它们之间有着明显的区别:List(列表):List是一个有序集合,它允许元素重复。它维护了元素插入的顺序,可以通过索引(基于0的整数)访问。List接......
  • 代码随想录算法训练营DAY18|C++二叉树Part.5|513.找树左下角的值、112. 路径总和、113
    文章目录513.找树左下角的值层序-迭代遍历前中后序-递归遍历思路伪代码CPP代码112.路径总和、113.路径总和II112.路径总和思路伪代码实现CPP代码113.路径总和II思路伪代码实现CPP代码实现106\105.从中(前)序与后(中)序遍历序列构造二叉树106.从中序与后序遍历序列......
  • mysql条件查询
    条件查询语法:select查询条件(III)from表名(I)where筛选条件(II)分类:1、按条件表达式筛选条件运算符:<、>、=、<>(不等于)、!=、<=、>=。2、按逻辑表达式筛选逻辑表达式:&&、||、!、and、or、not。&&和and:全真为真,一假全假||和or:全假为假,一真全真!和not:取反3、模......
  • 10倍速比2倍速容易,程序员创业必须知道的那些超越周期的原理。
    源头是这本书:《10xIsEasierThan2x》,​不想看可以直接翻到最后看总结:10倍比2倍容易,核心观点是:必须定一个10倍速的高目标,因为2倍速的提升往往是基于现有流程的定量优化,本质是陷入内卷;而10倍的目标则需要战略而非战术的优化,很少有路径可以达成。因此你必须在过程中剔除噪......
  • 哈佛遗传学教授发誓要用这 4 个习惯让身体年轻10岁
    长寿的话题已成为近年来的热门话题。目录1.你需要抛弃的食物2.不吃早餐3.他发誓的药物4.最难的部分人们不仅希望活得更久,而且还希望在没有伤害或疾病的情况下过上更快乐、更健康的生活。但众所周知,随着年龄的增长,受伤的频率太高了,生病和死于疾病的机会大大增加。​......