MySQL增删面试题

devtools/2024/9/24 6:33:21/

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

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

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

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

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

一、基础增删操作问题

1. 如何在 MySQL 中插入一条数据?
  • 问题描述:请写出一条向表 users 中插入用户数据的 SQL 语句。
  • 答案
    INSERT INTO users (name, age, email)
    VALUES ('张三', 25, 'zhangsan@example.com');
    
2. 如何在 MySQL 中删除一条数据?
  • 问题描述:假设 users 表中存在一条记录,id 为 1,请写出删除该记录的 SQL 语句。
  • 答案
    DELETE FROM users
    WHERE id = 1;
    
3. 如何插入多条数据?
  • 问题描述:请写出向 users 表插入多条记录的 SQL 语句。
  • 答案
    INSERT INTO users (name, age, email)
    VALUES ('张三', 25, 'zhangsan@example.com'),('李四', 30, 'lisi@example.com'),('王五', 22, 'wangwu@example.com');
    
4. 如何删除表中的所有数据?
  • 问题描述:请写出清空 users 表中所有记录的 SQL 语句。
  • 答案
    DELETE FROM users;
    
    或者:
    TRUNCATE TABLE users;
    
  • 区别
    • DELETE 会逐行删除数据,支持 WHERE 子句,删除后可以回滚。
    • TRUNCATE 是一种快速删除表中所有数据的操作,无法回滚且不支持 WHERE
5. 如何根据某个条件删除多条数据?
  • 问题描述:请写出删除 users 表中年龄大于 30 的用户的 SQL 语句。
  • 答案
    DELETE FROM users
    WHERE age > 30;
    

二、进阶增删操作问题

6. 插入时如何避免重复记录?
  • 问题描述:向 users 表中插入用户时,如果已经存在相同的 email,则忽略该条插入操作。请写出 SQL 语句。
  • 答案
    INSERT IGNORE INTO users (name, age, email)
    VALUES ('李四', 30, 'lisi@example.com');
    
  • 解释INSERT IGNORE 可以忽略插入时的重复键冲突或其他错误,不会影响已经存在的数据。
7. 如何在插入数据时,如果主键冲突则更新?
  • 问题描述:假设 users 表中的 email 字段具有唯一性约束。如何在插入新用户时,如果 email 已存在,则更新用户的 nameage
  • 答案
    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. 删除外键约束的数据时如何避免错误?
  • 问题描述:在有外键约束的情况下,删除一条数据会触发外键约束错误。如何安全地删除有关联的记录?
  • 答案
    • 方法一:手动删除外键约束相关表中的记录,确保不违反外键约束:
      DELETE FROM orders WHERE user_id = 1;
      DELETE FROM users WHERE id = 1;
      
    • 方法二:设置外键约束为级联删除,可以在外键设置中增加 ON DELETE CASCADE 规则,使得删除父表记录时自动删除关联的子表记录。
9. 如何限制删除操作的执行范围?
  • 问题描述:为了防止意外删除大量数据,如何设置只删除最多 10 条记录?
  • 答案
    DELETE FROM users
    WHERE age > 30
    LIMIT 10;
    
  • 解释LIMIT 限制删除操作的执行条数,避免意外删除大量数据。

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

10. 如何提高大量数据插入的性能?
  • 问题描述:如果需要向一个大表中插入数十万甚至上百万条记录,如何提高插入性能?
  • 答案
    • 批量插入:一次插入多条数据,减少 SQL 语句的执行次数。
      INSERT INTO users (name, age, email)
      VALUES ('张三', 25, 'zhangsan@example.com'),('李四', 30, 'lisi@example.com');
      
    • 禁用索引:在大批量插入数据之前,可以暂时禁用索引,插入完成后再重新启用索引。
      ALTER TABLE users DISABLE KEYS;
      -- 插入数据
      ALTER TABLE users ENABLE KEYS;
      
    • 使用事务:将大量插入操作放入事务中,减少每次操作的提交成本。
      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
      SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
      

四、其他相关问题

13. 如何使用 RETURNING 语句获取删除或插入的记录?
  • 问题描述:如何在删除或插入操作后获取受影响的记录?
  • 答案
    • 在 MySQL 8.0.19 及更高版本中,DELETEINSERT 支持 RETURNING 语句。
    DELETE FROM users
    WHERE age > 30
    RETURNING *;
    
14. 如何处理自增主键的插入?
  • 问题描述:如何向表中插入数据时跳过自增主键?
  • 答案
    • 可以不指定自增字段,数据库会自动为其分配值。
      INSERT INTO users (name, age, email)
      VALUES ('张三', 25, 'zhangsan@example.com');
      

总结

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

… …

文末

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

… …

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

wished for you successed !!!


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

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

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


http://www.ppmy.cn/devtools/116371.html

相关文章

深度学习:(七)梯度下降法在神经网络中的应用

梯度下降法在神经网络中的应用 事先规定: 用 n n n 表示个数(维度): n [ 0 ] n x n^{[0]}n_x n[0]nx​ ,表示单个训练样本 x x x 的元素个数; n [ 1 ] n^{[1]} n[1] 表示隐藏层 1 1 1 的单元(节点&am…

甩锅笔记:好好的服务端应用突然起不来,经定位是无法访问外网了?测试又说没改网络配置,该如何定位?

在工作中、团队协作时,可能遇到的问题,如集成测试等场景。但是作为偏前端的全栈,锅从天上来,不是你想甩就能甩,尤其面对测试等比较强势的团体(bug创造者),你必须有强大的心理承受能力…

Flask-JWT-Extended登录验证, 不用自定义

"""安装:pip install Flask-JWT-Extended创建对象 初始化与app绑定jwt JWTManager(app) # 初始化JWTManager设置 Cookie 的选项:除了设置 cookie 的名称和值之外,你还可以指定其他的选项,例如:过期时间 (max_age)&#xff1…

DANN GRL

域自适应是指在目标域与源域的数据分布不同但任务相同下的迁移学习,从而将模型在源域上的良好性能迁移到目标域上,极大地缓解目标域标签缺失严重导致模型性能受损的问题。 介绍一篇经典工作 DANN : 模型结构 在训练阶段需要预测如下两个任务…

流行的微前端框架有哪些,适应场景是什么

以下是一些流行的微前端框架,各自的适用场景 1. Single-SPA 适用场景: 适用于需要将大型应用拆分为多个小型、独立应用的场景。支持多种框架的集成。 GitHub地址: Single-SPA Star数量: 约6.8k 2. qiankun 适用场景&#x…

统信服务器操作系统【qcow2 镜像空间扩容】方案

使用 qcow2 镜像安装系统,当默认安装系统存储空间不够用时,进行自定义扩容 文章目录 准备环境扩容步骤一、检查环境信息1.查看镜像信息2.查看镜像分区信息3.确认需要扩容的分区名二、扩容1.备份镜像2.创建新的镜像文件,并指定空间3.将系统扩容到新的镜像三、扩容 lvm 分区四…

着色器ShaderMask

说明 实现一个渐变进度条,要求: 颜色渐变的过程是循序渐进的,而不是看起来像是将渐变条逐渐拉长了。 效果 源码 // 渐变进度条Stack(children: [// 背景色板Container(width: 300,height: 8,decoration: BoxDecoration(borderRadius: Bord…

Unity-物理系统-刚体加力

一 刚体自带添加力的方法 给刚体加力的目标就是 让其有一个速度 朝向某一个方向移动 1.首先应该获取刚体组件 rigidBody this.GetComponent<Rigidbody>(); 2.添加力 //相对世界坐标 //世界坐标系 Z轴正方向加了一个里 //加力过后 对象是否停止…