MySQL 数据操作语言 (DML)

embedded/2025/1/20 19:51:42/

MySQL 数据操作语言 (DML) 详细介绍及代码示例

一、引言

MySQL 是一种广泛使用的开源关系型数据库管理系统。数据操作语言 (DML) 是 SQL 的一个子集,主要用于对数据库中的数据进行插入、更新和删除操作。本文将详细介绍 MySQL 中的 DML 语句,并提供相应的代码示例。

二、创建示例数据库和表

在开始介绍 DML 语句之前,我们需要创建一个示例数据库和表。

-- 创建数据库
CREATE DATABASE IF NOT EXISTS example_db;
-- 使用数据库
USE example_db;
-- 创建表
CREATE TABLE IF NOT EXISTS employees (id INT AUTO_INCREMENT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),email VARCHAR(100),hire_date DATE
);

三、INSERT 语句

INSERT 语句用于向表中插入新记录。

1. 插入单条记录
INSERT INTO employees (first_name, last_name, email, hire_date)
VALUES ('John', 'Doe', 'john.doe@example.com', '2020-01-15');
2. 插入多条记录
INSERT INTO employees (first_name, last_name, email, hire_date)
VALUES 
('Jane', 'Smith', 'jane.smith@example.com', '2020-02-20'),
('Mike', 'Johnson', 'mike.johnson@example.com', '2020-03-10'),
('Emily', 'Davis', 'emily.davis@example.com', '2020-04-05');
3. 使用 SELECT 插入数据
INSERT INTO employees (first_name, last_name, email, hire_date)
SELECT first_name, last_name, email, hire_date
FROM temporary_employees
WHERE hire_date > '2020-01-01';

四、UPDATE 语句

UPDATE 语句用于更新表中的现有记录。

1. 更新单条记录
UPDATE employees
SET email = 'john.doe.updated@example.com'
WHERE id = 1;
2. 更新多条记录
UPDATE employees
SET hire_date = '2020-01-15'
WHERE hire_date > '2020-04-01';
3. 使用子查询更新数据
UPDATE employees
SET email = CONCAT(first_name, '.', last_name, '@example.com')
WHERE email IS NULL;

五、DELETE 语句

DELETE 语句用于从表中删除记录。

1. 删除单条记录
DELETE FROM employees
WHERE id = 1;
2. 删除多条记录
DELETE FROM employees
WHERE hire_date < '2020-01-01';
3. 使用子查询删除数据
DELETE FROM employees
WHERE id IN (SELECT id FROM temp_table WHERE some_condition);

六、事务处理

事务是一组SQL语句,它们要么全部执行成功,要么全部不执行。事务具有ACID属性:原子性、一致性、隔离性、持久性。

1. 开始事务
BEGIN;
2. 提交事务
COMMIT;
3. 回滚事务
ROLLBACK;
4. 事务处理示例
BEGIN;
INSERT INTO employees (first_name, last_name, email, hire_date)
VALUES ('Alice', 'White', 'alice.white@example.com', '2020-05-20');
UPDATE employees
SET email = 'bob.smith@example.com'
WHERE id = 2;
COMMIT;

七、错误处理

在执行DML操作时,可能会遇到各种错误,可以使用 DECLARE HANDLER 进行错误处理。

BEGIN;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGINROLLBACK;SELECT 'An error occurred, transaction rolled back.';
END;
INSERT INTO employees (first_name, last_name, email, hire_date)
VALUES ('Eva', 'Black', 'eva.black@example.com', '2020-08-20');
-- 假设这里发生了一个错误
INSERT INTO employees (first_name, last_name, email, hire_date)
VALUES ('Frank', 'Green', 'frank.green@example.com', '2020-09-15');
COMMIT;

八、性能优化

1. 创建索引
CREATE INDEX idx_email ON employees(email);
2. 批量操作
INSERT INTO employees (first_name, last_name, email, hire_date)
VALUES 
('Grace', 'Miller', 'grace.miller@example.com', '2020-10-10'),
('Helen', 'Taylor', 'helen.taylor@example.com', '2020-11-15'),
('Ivy', 'Anderson', 'ivy.anderson@example.com', '2020-12-20');
3. 优化查询
EXPLAIN SELECT * FROM employees WHERE email = 'john.doe@example.com';

九、结论

通过本文的介绍和示例代码,我们可以看到 DML 在 MySQL 中的重要性和强大功能。熟练掌握 DML 语句,结合事务处理和性能优化技巧,可以更高效地操作数据库中的数据。然而,在实际应用中,需要注意 DML 操作可能对数据库性能产生的影响,并进行必要的优化。


http://www.ppmy.cn/embedded/155567.html

相关文章

图论1-问题 B: 算法7-4,7-5:图的遍历——深度优先搜索

题目描述 深度优先搜索遍历类似于树的先根遍历&#xff0c;是树的先根遍历的推广。其过程为&#xff1a;假设初始状态是图中所有顶点未曾被访问&#xff0c;则深度优先搜索可以从图中的某个顶点v出发&#xff0c;访问此顶点&#xff0c;然后依次从v的未被访问的邻接点出发深度优…

SpringMVC 实战指南:打造高效 Web 应用的秘籍

第一章&#xff1a;三层架构和MVC 三层架构&#xff1a; 开发服务器端&#xff0c;一般基于两种形式&#xff0c;一种 C/S 架构程序&#xff0c;一种 B/S 架构程序使用 Java 语言基本上都是开发 B/S 架构的程序&#xff0c;B/S 架构又分成了三层架构三层架构&#xff1a; 表现…

thinkphp:实现压缩文件上传、解压、文件更名、压缩包删除功能,增加trycatch

代码 public function upload_firstsure() {try {// 检查是否有文件上传if (!isset($_FILES[file]) || !is_uploaded_file($_FILES[file][tmp_name])) {throw new \Exception(未接收到文件或文件上传失败);}// 获取上传的文件$uploaded_file $_FILES[file][tmp_name];$file_t…

基于Java+Sql Server实现的(GUI)学籍管理系统

基于Java实现的学籍管理系统 1.运行环境 1.1服务器要求 sql server 2008 及以上 1.2客户端要求 装有jvm 并与服务器在同一内网内&#xff0c;可ping通即可 2.功能说明 简化了数据库的使用者&#xff0c;即没有根据用户名自动切换布局的功能&#xff0c;目标使用者即为管…

【JVM】总结篇之GC性能优化案例

文章目录 性能优化案例1&#xff1a;调整堆大小提高服务的吞吐量初始配置优化配置 性能优化案例2&#xff1a;JVM优化之JIT优化即时编译对代码的优化逃逸分析编译器优化栈上分配同步省略标量替换 性能优化案例3&#xff1a;合理配置堆内存推荐配置如何计算老年代存活对象结论你…

HTML元素新视角:置换元素与非置换元素的区分与理解

在HTML的广阔天地里&#xff0c;元素是构建网页的基本单元。它们不仅承载着内容&#xff0c;还通过不同的属性与样式&#xff0c;塑造着网页的外观与功能。在众多HTML元素中&#xff0c;置换元素与非置换元素是一对重要的分类&#xff0c;它们各自独特的特性和行为模式&#xf…

后端开发流程学习笔记

后端开发流程学习笔记 术语前瞻 分类英文中文解释研发模式Waterfall Model瀑布模型瀑布模型&#xff08;Waterfall Model&#xff09;最早强调软件或系统开发应有完整之周期&#xff0c;且必须完整的经历周期之每一开发阶段&#xff0c;并系统化的考量分析与设计的技术、时间…

ip归属地和所在地什么区别:解析网络身份与物理位置的差异‌

在数字世界的浩瀚海洋中&#xff0c;IP地址如同每艘船只的航海图坐标&#xff0c;引领着数据包的航行方向。而IP归属地与所在地&#xff0c;则是这趟旅程中两个至关重要的概念。它们虽紧密相关&#xff0c;却又各具特色&#xff0c;共同构成了网络世界与现实世界的桥梁&#xf…