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 操作可能对数据库性能产生的影响,并进行必要的优化。

相关推荐
天天摸鱼的java工程师几秒前
CTO新项目直接上MySQL 8.0,老系统仍是5.7
java·后端·mysql
TDengine (老段)2 分钟前
TDengine 高级功能——读缓存
大数据·数据库·缓存·时序数据库·tdengine·涛思数据·iotdb
雷神乐乐7 分钟前
Oracle中的循环——FOR循环、WHILE循环和LOOP循环
数据库·sql·oracle·循环
wxgnolux10 分钟前
Oracle 故障实例 - 通过备份恢复到某时间点 故障恢复
数据库·oracle
阿火~11 分钟前
【亲测有效】Mybatis-Plus中更新字段为null
数据库·mysql·mybatis
weixin_3077791314 分钟前
Neo4j 备份与恢复:原理、技术与最佳实践
运维·数据库·neo4j
快乐肚皮24 分钟前
MySQL集群模式详解:架构、优缺点与生产环境选型指南
java·mysql
Kila_32 分钟前
【iOS(swift)笔记-13】App版本不升级时本地数据库sqlite更新逻辑一
数据库·笔记
Kila_34 分钟前
【iOS(swift)笔记-14】App版本不升级时本地数据库sqlite更新逻辑二
数据库·笔记
TDengine (老段)42 分钟前
TDengine 运维——巡检工具(安装前预配置)
大数据·运维·数据库·时序数据库·iot·tdengine·涛思数据