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', 'john.doe@example.com', '2020-01-15');
2. 插入多条记录
sql 复制代码
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 插入数据
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 = 'john.doe.updated@example.com'
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', 'alice.white@example.com', '2020-05-20');
UPDATE employees
SET email = 'bob.smith@example.com'
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', '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. 创建索引
sql 复制代码
CREATE INDEX idx_email ON employees(email);
2. 批量操作
sql 复制代码
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. 优化查询
sql 复制代码
EXPLAIN SELECT * FROM employees WHERE email = 'john.doe@example.com';

九、结论

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

相关推荐
大春儿的试验田几秒前
高并发收藏功能设计:Redis异步同步与定时补偿机制详解
java·数据库·redis·学习·缓存
Ein hübscher Kerl.32 分钟前
虚拟机上安装 MariaDB 及依赖包
数据库·mariadb
长征coder1 小时前
AWS MySQL 读写分离配置指南
mysql·云计算·aws
醇醛酸醚酮酯1 小时前
Qt项目锻炼——TODO清单(二)
开发语言·数据库·qt
ladymorgana1 小时前
【docker】修改 MySQL 密码后 Navicat 仍能用原密码连接
mysql·adb·docker
PanZonghui1 小时前
Centos项目部署之安装数据库MySQL8
linux·后端·mysql
GreatSQL社区2 小时前
用systemd管理GreatSQL服务详解
数据库·mysql·greatsql
掘根2 小时前
【MySQL进阶】错误日志,二进制日志,mysql系统库
数据库·mysql
weixin_438335402 小时前
基础知识:mysql-connector-j依赖
数据库·mysql
小明铭同学2 小时前
MySQL 八股文【持续更新ing】
数据库·mysql