【MySQL成神之路】MySQL插入、删除、更新操作汇总

MySQL 插入、删除和更新操作详解

一、插入数据(INSERT)

1. 基本插入语法

2. 插入多行数据

3. 从其他表插入数据

4. 插入NULL值和默认值

二、更新数据(UPDATE)

1. 基本更新语法

2. 使用子查询更新

3. 批量更新注意事项

三、删除数据(DELETE)

1. 基本删除语法

2. 清空表数据

3. 使用外键约束的删除

四、高级操作技巧

1. INSERT ON DUPLICATE KEY UPDATE

2. REPLACE INTO

3. 使用事务保证操作原子性

五、性能优化建议

总结


MySQL 插入、删除和更新操作详解

MySQL 中的插入(INSERT)、删除(DELETE)和更新(UPDATE)操作是数据库管理的基础操作,下面我将详细介绍这些操作的知识点,并提供代码示例。

一、插入数据(INSERT)

1. 基本插入语法

INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); 

示例:

-- 向employees表中插入一条记录 
INSERT INTO employees (emp_id, name, department, salary) 
VALUES (101, '张三', '销售部', 5000); 

2. 插入多行数据

INSERT INTO table_name (column1, column2, ...) 
VALUES (value1, value2, ...), (value1, value2, ...), ...; 

示例:

-- 一次性插入多条记录 
INSERT INTO employees (emp_id, name, department, salary) 
VALUES (102, '李四', '技术部', 8000), (103, '王五', '市场部', 6000), (104, '赵六', '人事部', 5500); 

3. 从其他表插入数据

INSERT INTO table_name1 (column1, column2, ...) 
SELECT column1, column2, ... FROM table_name2 WHERE condition; 

示例:

-- 从temp_employees表中选择数据插入到employees表 
INSERT INTO employees (emp_id, name, department, salary) 
SELECT emp_id, name, department, salary FROM temp_employees WHERE hire_date > '2022-01-01'; 

4. 插入NULL值和默认值

-- 插入NULL值 
INSERT INTO employees (emp_id, name, department, salary, bonus) VALUES (105, '钱七', '财务部', 7000, NULL); 
-- 使用默认值 
INSERT INTO employees (emp_id, name, department, salary) VALUES (106, '孙八', DEFAULT, 6500); 

二、更新数据(UPDATE)

1. 基本更新语法

UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; 

示例:

-- 更新特定员工的工资 
UPDATE employees SET salary = 7500 WHERE emp_id = 101; -- 更新多个字段 UPDATE employees SET department = '研发部', salary = salary * 1.1 WHERE department = '技术部'; 

2. 使用子查询更新

UPDATE table_name SET column1 = (SELECT ...) WHERE condition; 

示例:

-- 根据部门平均工资调整员工工资 
UPDATE employees e SET salary = salary * 1.05 WHERE salary < ( SELECT AVG(salary) FROM employees WHERE department = e.department ); 

3. 批量更新注意事项

对于大批量更新,建议:

  • 在低峰期执行
  • 分批更新,每次更新少量数据
  • 添加适当的sleep时间避免锁争用

示例:

-- 分批更新示例 
UPDATE products SET price = price * 1.1 
WHERE id BETWEEN 1 AND 100; DO SLEEP(0.1); UPDATE products SET price = price * 1.1 WHERE id BETWEEN 101 AND 200; DO SLEEP(0.1); 

三、删除数据(DELETE)

1. 基本删除语法

DELETE FROM table_name WHERE condition; 

示例:

-- 删除特定员工记录 
DELETE FROM employees WHERE emp_id = 105; 
-- 删除特定条件的记录 
DELETE FROM employees WHERE department = '临时部门'; 

2. 清空表数据

-- 使用DELETE清空表(可回滚) 
DELETE FROM table_name; 
-- 使用TRUNCATE清空表(更快,不可回滚) 
TRUNCATE TABLE table_name; 

3. 使用外键约束的删除

当表有外键约束时,可以使用ON DELETE CASCADE自动删除相关记录:

-- 创建表时设置级联删除 
CREATE TABLE orders ( order_id INT PRIMARY KEY, emp_id INT, order_date DATE, FOREIGN KEY (emp_id) REFERENCES employees(emp_id) ON DELETE CASCADE ); 
-- 删除员工时,其相关订单也会自动删除 
DELETE FROM employees WHERE emp_id = 101; 

四、高级操作技巧

1. INSERT ON DUPLICATE KEY UPDATE

当插入数据时如果主键冲突,则执行更新操作:

INSERT INTO employees (emp_id, name, department, salary) 
VALUES (101, '张三', '销售部', 5500) ON DUPLICATE KEY UPDATE name = VALUES(name), department = VALUES(department), salary = VALUES(salary); 

2. REPLACE INTO

如果记录存在则先删除再插入,不存在则直接插入:

REPLACE INTO employees (emp_id, name, department, salary) 
VALUES (101, '张三', '销售部', 6000); 

3. 使用事务保证操作原子性

START TRANSACTION; INSERT INTO orders (order_id, emp_id, order_date, amount) VALUES (1001, 101, '2023-05-01', 1000); UPDATE employees SET sales_count = sales_count + 1 WHERE emp_id = 101; COMMIT; -- 如果出现错误可以执行 ROLLBACK; 

五、性能优化建议

  1. 批量操作:尽量使用批量插入而非单条插入
  2. 索引影响:无索引时装载比索引装载更快
  3. LOAD DATA:大批量数据导入时,LOAD DATA比INSERT快约20倍
  4. 锁定策略:大批量更新时考虑分批进行,避免长时间锁表
  5. 禁用索引:大批量插入前可暂时禁用索引,完成后再重建

示例:

-- 禁用索引 
ALTER TABLE employees DISABLE KEYS; -- 执行大批量插入 
INSERT INTO employees ...; -- 启用索引 
ALTER TABLE employees ENABLE KEYS; 

总结

MySQL的增删改操作是数据库管理的核心功能。合理使用这些操作,并结合事务、索引优化等技术,可以显著提高数据库操作效率和安全性。在实际应用中,应根据具体场景选择最适合的操作方式,并注意性能优化和数据一致性问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/80936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亚马逊第四个机器人中心将如何降低30%配送成本?

近年来&#xff0c;亚马逊越来越依赖自动化技术来提升仓储效率和配送速度。2024年&#xff0c;亚马逊宣布其全球第四个机器人中心在美国正式投入运营&#xff0c;这一中心将成为改变供应链策略的新变量。据亚马逊官方消息&#xff0c;这一机器人中心有望帮助公司进一步削减运营…

MongoDB大数据量的优化——mongoTemplate.stream()方法使用

传统查询 在传统的 MongoDB 查询中&#xff0c;我们通常使用find方法&#xff1a; List<Document> results mongoTemplate.find(query, Document.class, "collection");这种方式会直接将查询结果全部加载到内存中&#xff0c;当数据量较大&#xff08;如百万…

JDK8中的 Stream流式编程用法优化(工具类在文章最后)

Java从JDK8起提供了Stream流这个功能&#xff0c;于是项目里出现了大量基于Stream流的写法。随着项目的进行&#xff0c;慢慢的代码中铺天盖地的都是下面的写法&#xff1a; List<User> userList null;if (condition) {userList new ArrayList<>();userList.add(…

Spring Cloud生态与技术选型指南:如何构建高可用的微服务系统?

引言&#xff1a;为什么选择Spring Cloud&#xff1f; 作为全球开发者首选的微服务框架&#xff0c;Spring Cloud凭借其开箱即用的组件、与Spring Boot的无缝集成&#xff0c;以及活跃的社区生态&#xff0c;成为企业级微服务架构的基石。但在实际项目中&#xff0c;如何从众多…

Android清单文件

清单文件AndroidManifest.xml AndroidManifest.xml 配置清单文件是 每个 Android 应用的配置中心&#xff0c;系统在安装和运行应用时&#xff0c;首先会读取它。 它是 Android 应用的 “说明书”&#xff0c;主要作用是&#xff1a; 功能说明声明应用组件比如 Activity、Se…

大语言模型与人工智能:技术演进、生态重构与未来挑战

目录 技术演进:从专用AI到通用智能的跃迁核心能力:LLM如何重构AI技术栈应用场景:垂直领域的技术革命生态关系:LLM与AI技术矩阵的协同演进挑战局限:智能天花板与伦理困境未来趋势:从语言理解到世界模型1. 技术演进:从专用AI到通用智能的跃迁 1.1 三次技术浪潮的跨越 #me…

SC3000智能相机-自动存图

1、需求:SC3000智能相机开机自动存图。相机自带的相机存储空间有限,预留存图需要开启SCMVS、并手动点存图。如果工人忘了开启则不会存图,导致生产严重失误! 2、方法:利用相机提供的FTP协议,将图自动存到本地。 1、在本地建立FTP服务器。 (1)win10默认开启了FTP服务器…

Wan2.1 文生视频 支持批量生成、参数化配置和多语言提示词管理

Wan2.1 文生视频 支持批量生成、参数化配置和多语言提示词管理 flyfish 设计 一个基于 Wan2.1 文本到视频模型的自动化视频生成系统。 文件关系图 script.py ├── 读取 → config.json │ ├── 模型配置 → 加载AI模型 │ ├── 生成参数 → 控制生成质量 │ └…

Flannel后端为UDP模式下,分析数据包的发送方式——tun设备(三)

在分析 Kubernetes 环境中 Flannel UDP 模式的数据包转发时&#xff0c;我们提到 flannel.1 是一个 TUN 设备&#xff0c;它在数据包处理中起到了关键作用。 什么是 TUN 设备&#xff1f; TUN 设备&#xff08;Tunnel 设备&#xff09;是 Linux 系统中一种虚拟网络接口&#x…

Java中创建线程的几种方式

目录 Java 创建线程的几种方式 一、继承 Thread 类 核心原理 实现步骤 代码示例 简化写法&#xff08;Lambda 表达式&#xff09; 优缺点 二、实现 Runnable 接口 核心原理 实现步骤 代码示例 简化写法&#xff08;Lambda 表达式&#xff09; 优缺点分析 三、实现…

[Git] 基本操作及用户配置

文章目录 现在所讲&#xff0c;全部是本地Git仓库&#xff0c;不是远程仓库&#xff01;Git是版本控制工具&#xff0c;而并非只能用远程仓库的版本控制工具&#xff01; 什么是“仓库”&#xff08;Repository&#xff09;&#xff1f;创建一个 Git 本地仓库&#xff1a;git i…

layui 介绍

layui&#xff08;谐音&#xff1a;类 UI) 是一套开源的 Web UI 解决方案&#xff0c;采用自身经典的模块化规范&#xff0c;并遵循原生 HTML/CSS/JS 的开发方式&#xff0c;极易上手&#xff0c;拿来即用。其风格简约轻盈&#xff0c;而组件优雅丰盈&#xff0c;从源代码到使用…

笔记:NAT

一、NAT 的基本概念 NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09; 是一种在 IP 网络中重新映射 IP 地址的技术&#xff0c;主要用于解决 IPv4 地址短缺问题&#xff0c;同时提供一定的网络安全防护作用。 功能&#xff1a; 将内部网络&am…

cursor/vscode启动项目connect ETIMEDOUT 127.0.0.1:xx

现象&#xff1a; 上午正常使用cursor/vscode&#xff0c;因为需要写前端安装了nodejs16.20和vue2&#xff0c;结果下午启动前端服务无法访问&#xff0c;浏览器一直转圈。接着测试运行最简单的flask服务&#xff0c;vscode报错connect ETIMEDOUT 127.0.0.1:xx&#xff0c;要么…

EXO分布式部署deepseek r1

EXO 是一个支持分布式 AI 计算的框架&#xff0c;可以用于在多个设备&#xff08;包括 Mac Studio&#xff09;上运行大语言模型&#xff08;LLM&#xff09;。以下是联调 Mac Studio 512GB 的步骤&#xff1a; 安装 EXO • 从 EXO GitHub 仓库 下载源码或使用 git clone 获取…

python训练营打卡第30天

模块和库的导入 知识点回顾&#xff1a; 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑&#xff1a;找到根目录&#xff08;python解释器的目录和终端的目录不一致&#xff09; 一、导入官方库 1.标准导入&#xff1a;导入整个库 import mathprint(&quo…

Unity 多时间源Timer定时器实战分享:健壮性、高效性、多线程安全与稳定性能全面解析

简介 Timer 是一个 Unity 环境下高效、灵活的定时任务调度系统&#xff0c;支持以下功能&#xff1a; •支持多种时间源&#xff08;游戏时间 / 非缩放时间 / 真实时间&#xff09; •支持一次性延迟执行和重复执行 •提供 ID、回调、目标对象等多种查询和销毁方式 •内建…

深入理解Docker和K8S

深入理解Docker和K8S Docker 是大型架构的必备技能&#xff0c;也是云原生核心。Docker 容器化作为一种轻量级的虚拟化技术&#xff0c;其核心思想&#xff1a;将应用程序及其所有依赖项打包在一起&#xff0c;形成一个可移植的单元。 容器的本质是进程&#xff1a; 容器是在…

docker中使用openresty

1.为什么要使用openresty 我这边是因为要使用1Panel&#xff0c;第一个最大的原因&#xff0c;就是图方便&#xff0c;比较可以一键安装。但以前一直都是直接安装nginx。所以需要一个过度。 2.如何查看openResty使用了nginx哪个版本 /usr/local/openresty/nginx/sbin/nginx …

CSS【详解】弹性布局 flex

适用场景 一维&#xff08;行或列&#xff09;布局 基本概念 包裹所有被布局元素的父元素为容器 所有被布局的元素为项目 项目的排列方向&#xff08;垂直/水平&#xff09;为主轴 与主轴垂直的方向交交叉轴 容器上启用 flex 布局 将容器的 display 样式设置为 flex 或 i…