MySQL增删面试题

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

在 MySQL 面试中,增删操作是数据库管理中的基础内容,通常会有一些相关的面试题。以下是一些围绕 MySQL 中增删操作的典型面试题,及其参考答案。

一、基础增删操作问题

1. 如何在 MySQL 中插入一条数据?
  • 问题描述 :请写出一条向表 users 中插入用户数据的 SQL 语句。

  • 答案

    sql 复制代码
    INSERT INTO users (name, age, email)
    VALUES ('张三', 25, 'zhangsan@example.com');
2. 如何在 MySQL 中删除一条数据?
  • 问题描述 :假设 users 表中存在一条记录,id 为 1,请写出删除该记录的 SQL 语句。

  • 答案

    sql 复制代码
    DELETE FROM users
    WHERE id = 1;
3. 如何插入多条数据?
  • 问题描述 :请写出向 users 表插入多条记录的 SQL 语句。

  • 答案

    sql 复制代码
    INSERT INTO users (name, age, email)
    VALUES ('张三', 25, 'zhangsan@example.com'),
           ('李四', 30, 'lisi@example.com'),
           ('王五', 22, 'wangwu@example.com');
4. 如何删除表中的所有数据?
  • 问题描述 :请写出清空 users 表中所有记录的 SQL 语句。

  • 答案

    sql 复制代码
    DELETE FROM users;

    或者:

    sql 复制代码
    TRUNCATE TABLE users;
  • 区别

    • DELETE 会逐行删除数据,支持 WHERE 子句,删除后可以回滚。
    • TRUNCATE 是一种快速删除表中所有数据的操作,无法回滚且不支持 WHERE
5. 如何根据某个条件删除多条数据?
  • 问题描述 :请写出删除 users 表中年龄大于 30 的用户的 SQL 语句。

  • 答案

    sql 复制代码
    DELETE FROM users
    WHERE age > 30;

二、进阶增删操作问题

6. 插入时如何避免重复记录?
  • 问题描述 :向 users 表中插入用户时,如果已经存在相同的 email,则忽略该条插入操作。请写出 SQL 语句。

  • 答案

    sql 复制代码
    INSERT IGNORE INTO users (name, age, email)
    VALUES ('李四', 30, 'lisi@example.com');
  • 解释INSERT IGNORE 可以忽略插入时的重复键冲突或其他错误,不会影响已经存在的数据。

7. 如何在插入数据时,如果主键冲突则更新?
  • 问题描述 :假设 users 表中的 email 字段具有唯一性约束。如何在插入新用户时,如果 email 已存在,则更新用户的 nameage

  • 答案

    sql 复制代码
    INSERT INTO users (name, age, email)
    VALUES ('李四', 30, 'lisi@example.com')
    ON DUPLICATE KEY UPDATE name = VALUES(name), age = VALUES(age);
  • 解释ON DUPLICATE KEY UPDATE 会在遇到主键或唯一键冲突时执行更新操作。

8. 删除外键约束的数据时如何避免错误?
  • 问题描述:在有外键约束的情况下,删除一条数据会触发外键约束错误。如何安全地删除有关联的记录?
  • 答案
    • 方法一:手动删除外键约束相关表中的记录 ,确保不违反外键约束:

      sql 复制代码
      DELETE FROM orders WHERE user_id = 1;
      DELETE FROM users WHERE id = 1;
    • 方法二:设置外键约束为级联删除 ,可以在外键设置中增加 ON DELETE CASCADE 规则,使得删除父表记录时自动删除关联的子表记录。

9. 如何限制删除操作的执行范围?
  • 问题描述:为了防止意外删除大量数据,如何设置只删除最多 10 条记录?

  • 答案

    sql 复制代码
    DELETE FROM users
    WHERE age > 30
    LIMIT 10;
  • 解释LIMIT 限制删除操作的执行条数,避免意外删除大量数据。

三、优化相关的增删操作问题

10. 如何提高大量数据插入的性能?
  • 问题描述:如果需要向一个大表中插入数十万甚至上百万条记录,如何提高插入性能?
  • 答案
    • 批量插入 :一次插入多条数据,减少 SQL 语句的执行次数。

      sql 复制代码
      INSERT INTO users (name, age, email)
      VALUES ('张三', 25, 'zhangsan@example.com'),
             ('李四', 30, 'lisi@example.com');
    • 禁用索引 :在大批量插入数据之前,可以暂时禁用索引,插入完成后再重新启用索引。

      sql 复制代码
      ALTER TABLE users DISABLE KEYS;
      -- 插入数据
      ALTER TABLE users ENABLE KEYS;
    • 使用事务 :将大量插入操作放入事务中,减少每次操作的提交成本。

      sql 复制代码
      START TRANSACTION;
      INSERT INTO users (name, age, email) VALUES ('张三', 25, 'zhangsan@example.com');
      -- 批量插入更多数据
      COMMIT;
11. DELETE 和 TRUNCATE 哪个性能更好?
  • 问题描述 :在删除大量数据时,使用 DELETETRUNCATE 有什么区别?哪个性能更好?
  • 答案
    • 性能TRUNCATE 性能比 DELETE 更好,尤其是删除大量数据时。TRUNCATE 不逐行删除记录,而是直接释放表的数据空间,操作较为迅速。
    • 回滚DELETE 可以在事务中使用,并支持回滚,而 TRUNCATE 无法回滚。
    • 触发器DELETE 会触发相关的 DELETE 触发器,而 TRUNCATE 不会。
12. 如何避免"幽灵行"问题?
  • 问题描述:在高并发环境下,如何在删除或插入数据时避免"幽灵行"问题?
  • 答案
    • 使用事务隔离级别 :可以通过提高事务隔离级别来避免"幽灵行"问题。最常见的是将隔离级别设置为 REPEATABLE READSERIALIZABLE

      sql 复制代码
      SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

四、其他相关问题

13. 如何使用 RETURNING 语句获取删除或插入的记录?
  • 问题描述:如何在删除或插入操作后获取受影响的记录?

  • 答案

    • 在 MySQL 8.0.19 及更高版本中,DELETEINSERT 支持 RETURNING 语句。
    sql 复制代码
    DELETE FROM users
    WHERE age > 30
    RETURNING *;
14. 如何处理自增主键的插入?
  • 问题描述:如何向表中插入数据时跳过自增主键?
  • 答案
    • 可以不指定自增字段,数据库会自动为其分配值。

      sql 复制代码
      INSERT INTO users (name, age, email)
      VALUES ('张三', 25, 'zhangsan@example.com');

总结

MySQL 中的增删操作是面试中的常见话题,考察范围从基本的增删语法到复杂的约束处理、事务和性能优化等。熟悉各种增删场景及其优化方法,可以帮助你更好地应对 MySQL 面试中的相关问题。

... ...

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

... ...

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

相关推荐
南城花随雪。4 分钟前
Redis(非关系型数据库)详细介绍
数据库·redis·nosql
冰红茶兑滴水12 分钟前
MySQL 内置函数
数据库·mysql
鸿·蒙17 分钟前
【PTA】【数据库】【SQL命令】编程题2
数据库·sql·pta
J.P.August31 分钟前
Oracle RAC 环境下数据文件误建在本地目录的处理过程
数据库·oracle
ThisIsClark32 分钟前
【后端面试总结】MySQL面试总结
mysql·面试·职场和发展
对酒当歌丶人生几何37 分钟前
Mybatis控制台打印SQL执行信息(执行方法、执行SQL、执行时间)
java·数据库·sql·mybatis
ThisIsClark40 分钟前
【后端面试总结】MySQL索引
mysql·面试·职场和发展
LightOfNight1 小时前
Redis设计与实现第14章 -- 服务器 总结(命令执行器 serverCron函数 初始化)
服务器·数据库·redis·分布式·后端·缓存·中间件
代码中の快捷键2 小时前
MySQL数据库存储引擎的数据结构
数据结构·数据库·mysql
Adolf_19932 小时前
Django 路由层
数据库