MySQL 基础面试题02(事务&索引)

这篇具有很好参考价值的文章主要介绍了MySQL 基础面试题02(事务&索引)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.什么是 MySQL 事务?

MySQL 事务是指一组操作,是一个不可分割的工作单位,可以确保一组数据库操作要么全部执行,要么全部不执行。换句话说,事务是 MySQL 中保证数据一致性和完整性的机制。

在 MySQL 中,事务可以用来保证数据库中数据的一致性和完整性,例如在向数据库中插入或更新一组数据时,要么所有数据插入或更新成功,要么所有操作全部回滚,保持数据的原样。

2.MySQL 事务的 ACID 特性是什么?

ACID 是事务处理中的关键概念,它指的是:

  1. 原子性(Atomicity):指事务中的操作要么全部执行成功、要么全部失败回滚,不会出现部分执行的情况。

  2. 一致性(Consistency):指在事务开始和结束后,数据库的完整性约束没有被破坏,也就是说事务执行前后都需要满足一些预定义的约束条件。

  3. 隔离性(Isolation):指一个事务中的执行不受其他并发事务的影响,它们之间是相互隔离的。

  4. 持久性(Durability):指在事务提交之后,对数据的更新就被永久写入数据库,即使数据库出现故障也能够恢复。

3.什么是隔离级别?MySQL 支持哪些隔离级别?

隔离级别(Isolation Level)是指在并发情况下,不同事务之间对数据库操作数据的可见性和影响范围的规定。 MySQL 支持以下四种隔离级别:

  1. 读未提交(Read Uncommitted):一个事务所做的修改,即使没有提交,对其他事务也是可见的。在这种隔离级别下可能会出现脏读和不可重复读问题。

  2. 读已提交(Read Committed):一个事务所做的修改,在提交后才会对其他事务可见,同样可能会出现不可重复读问题。

  3. 可重复读(Repeatable Read):保证了在同一个事务中对同一数据的读取是一致的,不受其他事务的影响。但是,可能会出现幻读问题。

  4. 序列化(Serializable):最严格的隔离级别,它通过对所有事务进行串行化执行来保证事务的隔离性。这种隔离级别能够避免所有并发问题,但是会对数据库性能产生较大影响。

在选择隔离级别时,需要根据应用的实际情况和数据安全性要求来选择,即需要权衡数据安全性和数据库性能。通常情况下,可重复读已经能够满足大部分应用需求。

4.如何启用或禁用 MySQL 的自动提交?

MySQL 默认自动提交,也就是每条 SQL 语句执行完之后都会自动提交事务。如果要禁用自动提交,需要使用以下语句:

SET autocommit=0;

如果你想启用自动提交,可以使用以下语句:

SET autocommit=1;

你也可以通过配置文件的方式来开启或禁用 MySQL 的自动提交,默认情况下 autocommit 参数为开启状态。

5.MySQL 中如何开始和提交事务?

要将一系列 SQL 语句封装到一个事务中,你需要使用 START TRANSACTION 开始事务,并使用 COMMIT 提交事务。下面是一个例子:

START TRANSACTION;
UPDATE table1 SET column1 = value1 WHERE id = 1;
UPDATE table2 SET column2 = value2 WHERE id = 2;
COMMIT;

在这个例子中,我们在两个表中更新了数据,并将这些操作封装在了一个事务中。只有在所有的更新操作都执行成功后,才会使用 COMMIT 提交整个事务,否则会撤销所有更新操作并回滚到事务开始前的状态。

如果你需要回滚一个事务,可以使用 ROLLBACK 命令。如果你希望回滚到事务开始前的状态,可以使用以下命令:

ROLLBACK;

如果你只想回滚到某个特定的保存点(Savepoint),可以使用以下命令:

ROLLBACK TO savepoint_name;

可以通过 SAVEPOINT 命令来创建保存点,例如:

SAVEPOINT savepoint_name;

这样就可以在事务的执行过程中创建多个不同的保存点,并能在需要时使用它们回滚事务。

6.如何回滚 MySQL 中的事务?

回滚 MySQL 中的事务可以使用 ROLLBACK 命令。如果要回滚整个事务,可以执行以下命令:

ROLLBACK;

这将撤销所有尚未提交的事务,使数据库返回到事务开始之前的状态。

如果您希望回滚指定的保存点,可以使用以下命令:

ROLLBACK TO savepoint_name;

在这种情况下,MySQL 将回滚到指定的保存点,并将所有从该保存点开始的 SQL 语句撤消,然后返回到保存点的状态。

你还可以使用 COMMIT 命令提交事务,将事务中所有的更改保存到数据库中。需要注意的是,如果在提交事务之前执行了 ROLLBACK 命令,将会撤销所有未提交的更改,因此最好每次提交前都对事务进行仔细检查。

7.什么是索引?在 MySQL 中有哪些常见的索引类型?

索引是一种数据结构,可以帮助我们快速定位表中的数据。在 MySQL 中,常见的索引类型包括:

  1. B-Tree 索引:最常用的索引类型。在 B-Tree 索引中,数据按照固定的排序存储在树结构中,查询时可以快速地跳跃到相关的数据。

  2. 哈希索引:使用哈希函数将索引列的值映射为哈希值,然后根据哈希值进行查找。哈希索引适用于等值查询,但不适用于范围查询。

  3. 全文索引:在文本数据类型上创建索引,支持模糊查询和高级查询。只有 InnoDB 存储引擎支持全文索引。

  4. 空间索引:在空间数据类型上创建索引,可以支持地理位置等空间查询。

此外,还有前缀索引、联合索引等其他类型的索引。每种索引类型有其适用的场景和使用方法,需要根据具体情况选择合适的索引类型。

8.什么情况下应该为表中的列创建索引?

通常情况下,应该为需要经常进行查询的列创建索引,特别是那些数据量较大的列。使用索引可以显著提高查询效率。但是,在创建索引的时候,需要注意索引会增加数据表的存储空间和数据修改的成本,因此不能为所有列都创建索引。

以下是创建索引的一些建议:

  1. 主键应该是唯一的,且自动递增的,因此默认会创建主键索引。
  2. 对经常用于搜索条件的列进行索引,如where和join语句中使用的列。
  3. 列值不重复或者重复很少的列上创建索引,如性别、状态等列。
  4. 对经常需要排序的列进行索引。

需要注意的是,索引并不是万能的,也并不是越多越好。在数据量比较小的情况下,无索引查询的效率可能比使用索引还要高;在数据修改和写入比较频繁的表中,创建过多的索引会影响数据的修改和写入性能,因此需要权衡索引的使用和维护成本,选择合适的索引策略。

9.什么是覆盖索引?

覆盖索引是指一个索引包含了查询所需的所有列数据,因此在查询时可以直接使用索引返回结果,而不需要回到数据表中查找数据行,从而大幅提高查询性能。

举个例子,假设有一张订单表,包含了订单编号、订单金额、订单日期等列,如果我们需要查询某个日期范围内的所有订单金额,我们可以在订单日期列上创建一个索引,如果该索引还包含了订单金额列,那么查询时就可以直接使用这个索引返回查询结果,而不需要再回到订单表中查找对应的订单金额,这就是覆盖索引。

可以看出,覆盖索引可以大幅提高查询性能,尤其是在大数据量的情况下。但是,在创建覆盖索引时需要注意,索引需要包含查询所需的所有列数据,因此索引的大小可能会比较大,从而增加读取磁盘的成本,也需要权衡创建索引的成本和查询性能的提高。

10.MySQL 中如何查看表的索引信息?

在MySQL中可以通过 DESC 命令查看表的索引信息,具体操作如下:

  1. 连接到 MySQL 数据库服务器
mysql -u 用户名 -p
  1. 选择需要查看索引信息的数据库
USE 数据库名;
  1. 查看表的结构和索引信息
DESC 表名;

结果会显示出表中每个列的详细信息,以及该表上的每个索引包含的列信息、索引类型等。

  1. 或者使用 SHOW INDEX 命令查看
SHOW INDEX FROM 表名;

结果会显示出当前表所有的索引信息,包括索引名称、列名、索引类型、索引方法、索引所在位置、索引是否唯一等信息。

通过上述命令,可以查看表的索引信息,帮助我们优化查询性能和创建更有效的索引。

11.什么是最左前缀原则?

最左前缀原则是 MySQL 使用索引进行查询的一种规则。它指的是如果一个复合索引包含多个列,那么在查询时只有使用了索引中的最左边的列,索引才能发挥作用。也就是说,索引的列顺序非常重要,只有在最左边的列被使用时,查询才能在索引中快速定位数据。

举个例子,假如我们有一个复合索引包含 name 和 age 两列,如果我们想查询 name=‘Tom’ and age=18 的数据,那么只有在使用 name 这一列的情况下,索引才会被使用。如果查询使用了 age 列,那么索引就无法发挥作用,这时 MySQL 会扫描整张表进行查询,效率会变得非常低下。

因此,在设计索引时要考虑使用最左前缀原则,将最常用的列放在最左边。这样可以使索引更加高效,查询速度更快。文章来源地址https://www.toymoban.com/news/detail-517162.html

到了这里,关于MySQL 基础面试题02(事务&索引)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL的索引使用的数据结构,事务知识

    一、索引的数据结构 🌸 索引的数据结构(非常重要) mysql的索引的数据结构,并非定式!!!取决于MySQL使用哪个存储引擎 数据库这块组织数据使用的数据结构是在硬盘上的。我们平时写的代码是存在内存里面,内存里面的数据结构,对于访问操作不敏感,(找数据的过程

    2024年02月10日
    浏览(31)
  • MySQL 数据存储和优化------MySQL索引原理和优化 ---- (架构---索引---事务---锁---集群---性能---分库分表---实战---运维)持续更新

    Mysql架构体系全系列文章主目录(进不去说明还没写完) https://blog.csdn.net/grd_java/article/details/123033016 本文只是整个系列笔记的第二章:MySQL索引原理和优化,只解释索引相关概念。 索引可以提高查询效率,影响where查询和order by排序,它可以从多方面进行分类,但是实际创建时

    2024年02月02日
    浏览(40)
  • 【Mysql数据库 第13章】MySQL的事务、事务的隔离级别、事务的保存点

    💖Spring中的创建对象的三种方式、第三方资源配置管理详细描述及使用(XML版完结篇) 💖Spring中的bean的配置、作用范围、生命周期详细描述及使用(XML版上篇) 💖

    2023年04月20日
    浏览(48)
  • MySQL数据库--事务

    MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中, 要删除一个人员,即需要删除人员的基本资料,又需要删除和该人员相关的信息,如信箱, 文章等等。这样,这些数据库操作语句就构成一个事务! 事务是一种机制、一个操作序列,包含了一

    2024年02月11日
    浏览(30)
  • 【MySQL数据库】事务

    事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体,一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。 事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时,事务是最小的控制单

    2024年02月09日
    浏览(31)
  • mysql数据库之事务

    总的来说,事务 就是一种机制,包含了一组操作命令,会作为一个不可分割的整体,要么都执行,要么都不执行 ,它保证了数据库的安全可靠性 是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这

    2024年02月09日
    浏览(36)
  • 简单认识MySQL数据库事务

    MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在战舰登录系统中, 要删除一艘战舰,即需要删除战舰的基本资料,又需要删除和该战舰相关的信息,如舰长, 登记船员等等。这样,这些数据库操作语句就构成一个事务! ●事务是一种机制、一个操作序列,包

    2024年02月16日
    浏览(33)
  • 【MySQL数据库 | 第十五篇】事务

        目录    前言:  介绍事务:  控制事务:  事务四大特性:  并发事务问题:  事务隔离级别: 总结:   这章我们将进入到MySQL基础篇的最后一章:事务,希望大家可以坚持下去,跟着我一起走完MySQL的学习之旅。 MySQL是一种关系型数据库管理系统,支持事务管理。 事

    2024年02月08日
    浏览(40)
  • MySQL数据库:索引

            索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。         相当于是给数据库中的数据建立了一个目录,通过目录可以知道数据所在位置,然后到指定位置

    2023年04月17日
    浏览(56)
  • 【MySql】数据库索引

    可以简单理解为一本书的目录信息,是为了提升查找效率而建立的 1、在创建一个主键、唯一键、外键时候,数据库会自动地针对查找字段设置索引; 2、在创建表时侯,使用 index 进行普通索引的声明 3、修改表结构,给指定的字段添加索引 alter table 表名 add index 索引名

    2024年02月03日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包