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 !!!


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

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

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

相关推荐
码爸7 分钟前
kafka负载均衡迁移(通过kafka eagle)
数据库·分布式·kafka
小强签名设计36 分钟前
Debian安装mysql遇到的问题解决及yum源配置
mysql·adb·debian
这孩子叫逆1 小时前
3. 什么是连接池?为什么使用数据库连接池?
数据库·mysql
计算机学姐1 小时前
基于SpringBoot+Vue的在线问诊管理系统
java·vue.js·spring boot·后端·mysql·spring·mybatis
solihawk1 小时前
数据库主备副本物理复制和逻辑复制对比
网络·数据库·oracle
Data 3171 小时前
Hadoop三大组件之HDFS(一)
大数据·数据库·数据仓库·hadoop·hdfs·etl
蘑菇蘑菇不会开花~2 小时前
MySQL | 实战 | 4 种将数据同步到ES方案
数据库·mysql·elasticsearch
-心铭-2 小时前
有关在.Net Core中以TEXT类型将Json格式字段存到数据库的学习
数据库·学习·.netcore
说书客啊2 小时前
计算机毕业设计 | SSM 凌云招聘平台 求职问答审批系统(附源码)
java·spring boot·后端·mysql·毕业设计·ssm·课程设计
程序员大金2 小时前
基于SpringBoot+Vue+MySQL的旅游推荐管理系统
前端·vue.js·spring boot·后端·mysql·tomcat·旅游