MySQL面试之什么是聚合函数、事务、索引?(通俗易懂版)

1、聚合函数:

MySQL中的聚集函数用于对一组数据进行计算并返回单个结果。常见的聚集函数包括:

  • COUNT():用于计算结果集中行的数量。
  • SUM():对结果集中的数值列进行求和。
  • AVG():计算结果集中数值列的平均值。
  • MAX():返回结果集中数值列的最大值。
  • MIN():返回结果集中数值列的最小值。

这些函数可以与SQL的SELECT语句结合使用,通常在使用GROUP BY子句对结果进行分组时使用,以便在每个组中对数据执行聚合操作。

2、事务:

MySQL中的事务是一组SQL语句的集合,作为一个逻辑单元一起执行,处理复杂的数据。

2.1、事务具有四个特性,通常称为ACID:

  • 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部失败回滚,即事务是不可分割的单元。如果事务失败,则所有已完成的操作会被回滚,数据库状态将恢复到事务开始前的状态。

  • 一致性(Consistency):事务执行的结果必须使数据库从一个一致性状态转移到另一个一致性状态。这意味着事务执行前后,数据库的完整性约束、外键关系等都必须得到维护。

  • 隔离性(Isolation):并发执行的事务之间应该相互隔离,一个事务的执行不应该受到其他事务的影响。隔离级别定义了事务之间的隔离程度,包括读未提交、读已提交、可重复读和串行化。

  • 持久性(Durability):一旦事务提交,其结果应该永久保存在数据库中,即使系统崩溃或重启,事务的结果也不应丢失。

通过使用事务,可以确保数据库操作的一致性和可靠性,尤其在处理复杂的业务逻辑或需要多个操作同时成功或失败时特别有用。

2.2、简单例子:

在一个人员管理系统中,假设有两个表:personemails,分别用来存储人员的基本信息和他们的邮箱地址。现在,你想要删除某个人员的所有信息,包括其基本信息和关联的邮箱地址。在MySQL中,你可以使用事务来确保这个删除操作的原子性,即要么所有操作都成功执行,要么都失败回滚,以保证数据的一致性。

START TRANSACTION; -- 开启事务

-- 删除person表中的人员信息
DELETE FROM person WHERE person_id = 123;

-- 删除emails表中与该人员相关的邮箱地址
DELETE FROM emails WHERE person_id = 123;

COMMIT; -- 提交事务

事务开始时,我们使用START TRANSACTION;语句开启了一个新的事务。接着,我们执行了两个DELETE语句,分别从person表和emails表中删除了person_id为123的记录,即某个特定人员的所有信息。最后,我们使用COMMIT;语句提交了事务,这样就会将所有的删除操作一起提交到数据库,确保这些操作要么全部成功执行,要么全部失败回滚。

3、索引:

MySQL索引是一种数据结构,用于快速查找数据库表中的数据。就像书籍的目录一样,索引可以帮助数据库快速找到存储在表中的数据,而不必扫描整个表。这样可以大大提高数据检索的速度。但是,索引也会占用额外的存储空间,并且在插入、更新或删除数据时可能会稍微降低性能。因此,需要根据具体情况权衡是否创建索引。

3.1、简单例子:

有一个名为books的数据库表,存储了大量书籍的信息,包括书名、作者、出版日期等。现在你想要查询所有作者是"李华"的书籍。如果books表中没有任何索引,那么数据库引擎需要逐行扫描整个表,查找作者是"李华"的所有行,这可能会非常耗时,尤其是当表中有大量数据时。但是,如果在books表的author列上创建了一个索引,数据库引擎就可以使用这个索引快速定位到所有作者是"李华"的书籍所在的行,而不必扫描整个表。这样就大大提高了查询的速度。这就好比有了一本按照作者姓名排列的书籍目录,只需要翻到"李华"这一页,就能找到所有相关的书籍,而不必一页一页地查找。所以,通过在适当的列上创建索引,可以让数据库在查询数据时更加高效。

-- 在books表的author列上创建索引
CREATE INDEX idx_author ON books(author);

  • 27
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值