MySQL 数据操作语言 (DML)

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

一、引言

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

二、创建示例数据库和表

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

sql 复制代码
-- 创建数据库
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. 插入单条记录
sql 复制代码
INSERT INTO employees (first_name, last_name, email, hire_date)
VALUES ('John', 'Doe', '[email protected]', '2020-01-15');
2. 插入多条记录
sql 复制代码
INSERT INTO employees (first_name, last_name, email, hire_date)
VALUES 
('Jane', 'Smith', '[email protected]', '2020-02-20'),
('Mike', 'Johnson', '[email protected]', '2020-03-10'),
('Emily', 'Davis', '[email protected]', '2020-04-05');
3. 使用 SELECT 插入数据
sql 复制代码
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. 更新单条记录
sql 复制代码
UPDATE employees
SET email = '[email protected]'
WHERE id = 1;
2. 更新多条记录
sql 复制代码
UPDATE employees
SET hire_date = '2020-01-15'
WHERE hire_date > '2020-04-01';
3. 使用子查询更新数据
sql 复制代码
UPDATE employees
SET email = CONCAT(first_name, '.', last_name, '@example.com')
WHERE email IS NULL;

五、DELETE 语句

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

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

六、事务处理

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

1. 开始事务
sql 复制代码
BEGIN;
2. 提交事务
sql 复制代码
COMMIT;
3. 回滚事务
sql 复制代码
ROLLBACK;
4. 事务处理示例
sql 复制代码
BEGIN;
INSERT INTO employees (first_name, last_name, email, hire_date)
VALUES ('Alice', 'White', '[email protected]', '2020-05-20');
UPDATE employees
SET email = '[email protected]'
WHERE id = 2;
COMMIT;

七、错误处理

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

sql 复制代码
BEGIN;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
    ROLLBACK;
    SELECT 'An error occurred, transaction rolled back.';
END;
INSERT INTO employees (first_name, last_name, email, hire_date)
VALUES ('Eva', 'Black', '[email protected]', '2020-08-20');
-- 假设这里发生了一个错误
INSERT INTO employees (first_name, last_name, email, hire_date)
VALUES ('Frank', 'Green', '[email protected]', '2020-09-15');
COMMIT;

八、性能优化

1. 创建索引
sql 复制代码
CREATE INDEX idx_email ON employees(email);
2. 批量操作
sql 复制代码
INSERT INTO employees (first_name, last_name, email, hire_date)
VALUES 
('Grace', 'Miller', '[email protected]', '2020-10-10'),
('Helen', 'Taylor', '[email protected]', '2020-11-15'),
('Ivy', 'Anderson', '[email protected]', '2020-12-20');
3. 优化查询
sql 复制代码
EXPLAIN SELECT * FROM employees WHERE email = '[email protected]';

九、结论

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

相关推荐
小哈里几秒前
【Oracle认证】MySQL 8.0 OCP 认证考试英文版(MySQL30 周年版)
数据库·mysql·ocp·oracle认证·证书考试
kingwebo'sZone1 小时前
Error parsing column 10 (YingShou=-99.5 - Double) dapper sqlite
数据库·sqlite
Austindatabases1 小时前
给阿里云MongoDB 的感谢信 !!成本降低80%
数据库·mongodb·阿里云·云计算
lyrhhhhhhhh2 小时前
JDBC工具类的三个版本
数据库
正在走向自律2 小时前
【金仓数据库征文】政府项目数据库迁移:从MySQL 5.7到KingbaseES的蜕变之路
数据库·mysql·kingbasees·金仓数据库 2025 征文·数据库平替用金仓
黑客笔记3 小时前
sql注入漏洞的对抗
数据库·sql·测试工具
tianlebest3 小时前
Laravel 安全:批量赋值 fillable 与 guarded
数据库·安全·laravel
小叶子来了啊4 小时前
软考(信息系统运行管理员)
数据库
chunfeng—4 小时前
Redis 主从同步与对象模型(四)
数据库·redis·缓存·集群·哨兵
Leo.yuan4 小时前
热力图是什么?三分钟学会热力图数据分析怎么做!
大数据·数据库·数据挖掘·数据分析·html