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


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

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

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

相关推荐
huihui4501 小时前
一天一道Sql题(day01)
数据库
~尼卡~1 小时前
软考(软件设计师)数据库原理:事务管理,备份恢复,并发控制
数据库·软件设计师-软考
八九燕来1 小时前
Django双下划线查询
数据库·django·sqlite
眠りたいです2 小时前
Mysql常用内置函数,复合查询及内外连接
linux·数据库·c++·mysql
paopaokaka_luck2 小时前
智能推荐社交分享小程序(websocket即时通讯、协同过滤算法、时间衰减因子模型、热度得分算法)
数据库·vue.js·spring boot·后端·websocket·小程序
M1A12 小时前
Java 面试系列第一弹:基础问题大盘点
java·后端·mysql
He.ZaoCha2 小时前
函数-1-字符串函数
数据库·sql·mysql
二当家的素材网3 小时前
Centos和麒麟系统如何每天晚上2点10分定时备份达梦数据库
linux·数据库·centos
白仑色3 小时前
Oracle 存储过程、函数与触发器
数据库·oracle·数据库开发·存储过程·plsql编程
叁沐3 小时前
MySQL 09 普通索引和唯一索引,应该怎么选择?
mysql