MySQL DML基本操作示例详解

 更新时间:2025年09月08日 14:15:25   作者:xclic  
DML包含INSERT、UPDATE、DELETE和SELECT,用于操作数据库数据,本文通过实例代码给大家介绍MySQL DML基本操作,感兴趣的朋友跟随小编一起看看吧

DML 是用于操作数据库中实际数据的 SQL 语句集合,主要包括四大操作:插入(INSERT)、查询(SELECT)、更新(UPDATE)和删除(DELETE)。

1、INSERT - 插入数据

1.1 基本语法

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

注意:

  • 字段顺序需与值的顺序一一对应
  • 可不指定所有字段(未指定的字段将使用默认值,如自增主键 id、created_at 等)
  • 字符串值需用单引号 ' 包裹
  • 日期时间值可直接用字符串表示(如 '2023-10-01 12:00:00')

1.2 示例详解

1.2.1 插入完整数据(所有列)

-- 假设表有 id, name, email, age 列,其中 id 是自增主键
INSERT INTO users (name, email, age)
VALUES ('张三', 'zhangsan@example.com', 25);

1.2.2 插入部分数据

-- 只插入 name 和 email,age 使用默认值或 NULL
INSERT INTO users (name, email)
VALUES ('李四', 'lisi@example.com');

1.2.3 一次性插入多行数据

INSERT INTO users (name, email, age)
VALUES 
('王五', 'wangwu@example.com', 30),
('赵六', 'zhaoliu@example.com', 28),
('孙七', 'sunqi@example.com', 35);

1.2.3 从其他表复制数据插入

-- 将临时表中的数据插入到正式表
INSERT INTO users (name, email, age)
SELECT temp_name, temp_email, temp_age FROM temp_users;

1.2.3 插入时处理重复键

-- 如果遇到重复的唯一键(如email),则更新其他字段
INSERT INTO users (name, email, age)
VALUES ('张三', 'zhangsan@example.com', 26)
ON DUPLICATE KEY UPDATE age = 26, name = '张三';
-- 或者忽略重复键的插入
INSERT IGNORE INTO users (name, email, age)
VALUES ('张三', 'zhangsan@example.com', 26);

2、UPDATE - 更新数据

用于修改表中现有的记录。

2.1 基本语法

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

注意:

  • 严禁省略 WHERE 条件,否则会更新表中所有记录
  • 可同时更新多个字段,用逗号分隔
  • 可使用函数或表达式作为值(如 updated_at = NOW())

2.2 示例详解

2.2.1 更新单个字段

UPDATE users 
SET email = 'new_email@example.com'
WHERE id = 1;

2.2.2 更新多个字段

UPDATE users 
SET 
    name = '张三丰',
    age = 28,
    email = 'zhangsanfeng@example.com'
WHERE id = 1;

2.2.3 基于原值更新

-- 年龄增加1岁
UPDATE users 
SET age = age + 1
WHERE id = 1;
-- 字符串拼接
UPDATE users 
SET name = CONCAT(name, '先生')
WHERE gender = '男';

2.2.4 使用子查询更新

-- 将有订单的用户标记为活跃用户
UPDATE users 
SET is_active = TRUE
WHERE id IN (SELECT DISTINCT user_id FROM orders);

2.2.5 批量更新

-- 使用 CASE 条件更新
UPDATE users 
SET age_group = 
    CASE 
        WHEN age < 20 THEN '青少年'
        WHEN age BETWEEN 20 AND 40 THEN '青年'
        ELSE '中年及以上'
    END;

3、DELETE - 删除数据

用于从表中删除记录。

3.1 基本语法

DELETE FROM table_name
WHERE condition;

3.2 示例详解

3.2.1 删除特定记录

DELETE FROM users 
WHERE id = 1;

3.2.2 删除多条记录

-- 删除所有未激活的用户
DELETE FROM users 
WHERE is_active = FALSE;
-- 删除年龄大于100的用户
DELETE FROM users 
WHERE age > 100;

3.2.3 使用子查询删除

-- 删除没有订单的用户
DELETE FROM users 
WHERE id NOT IN (SELECT DISTINCT user_id FROM orders);

3.2.4 清空表(慎用!)

-- 删除所有记录
DELETE FROM users;
-- 更快的清空表方式(不可回滚)
TRUNCATE TABLE users;

4、SELECT - 查询数据

用于从数据库中查询数据,这是最复杂和最常用的 DML 语句。

4.1 基本语法

SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...]
[GROUP BY column1, column2, ...]
[HAVING condition]
[LIMIT number];

4.2 示例详解

4.2.1 查询所有列

SELECT * FROM users;

4.2.2 查询特定列

SELECT name, email FROM users;

4.2.3 使用别名

    SELECT 
    name AS 姓名, 
    email AS 邮箱,
    age AS 年龄
FROM users;

4.2.4 使用 WHERE 条件过滤

-- 简单条件
SELECT * FROM users WHERE age > 25;
-- 多条件组合
SELECT * FROM users 
WHERE age > 25 AND name LIKE '张%';
-- 使用 IN
SELECT * FROM users 
WHERE age IN (25, 30, 35);
-- 使用 BETWEEN
SELECT * FROM users 
WHERE age BETWEEN 25 AND 35;
-- 使用 IS NULL
SELECT * FROM users 
WHERE email IS NULL;

4.2.4 排序结果

-- 单字段排序
SELECT * FROM users ORDER BY age DESC;
-- 多字段排序
SELECT * FROM users 
ORDER BY age DESC, name ASC;

4.2.5 限制结果集

-- 前10条记录
SELECT * FROM users LIMIT 10;
-- 分页查询:从第20条开始,取10条
SELECT * FROM users LIMIT 20, 10;
-- 或者使用新语法
SELECT * FROM users LIMIT 10 OFFSET 20;

4.2.6 去重查询

-- 获取所有不同的年龄
SELECT DISTINCT age FROM users;

4.2.7 聚合函数

-- 计数
SELECT COUNT(*) FROM users;
SELECT COUNT(DISTINCT age) FROM users;
-- 求和、平均、最大、最小
SELECT 
    COUNT(*) AS 总人数,
    AVG(age) AS 平均年龄,
    MAX(age) AS 最大年龄,
    MIN(age) AS 最小年龄,
    SUM(age) AS 年龄总和
FROM users;

4.2.8 分组查询

-- 按年龄分组统计
SELECT 
    age,
    COUNT(*) AS 人数
FROM users
GROUP BY age;
-- 分组后筛选
SELECT 
    age,
    COUNT(*) AS 人数
FROM users
GROUP BY age
HAVING COUNT(*) > 5;

4.2.9 连接查询

-- 内连接
SELECT 
    u.name,
    o.order_id,
    o.order_date
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
-- 左连接
SELECT 
    u.name,
    o.order_id
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;
-- 多表连接
SELECT 
    u.name,
    p.product_name,
    oi.quantity
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN order_items oi ON o.order_id = oi.order_id
JOIN products p ON oi.product_id = p.id;

4.2.10 子查询

-- 在 WHERE 中使用子查询
SELECT * FROM users 
WHERE age > (SELECT AVG(age) FROM users);
-- 在 FROM 中使用子查询(派生表)
SELECT *
FROM (
    SELECT name, age FROM users WHERE age > 25
) AS adult_users;
-- 在 SELECT 中使用子查询
SELECT 
    name,
    age,
    (SELECT COUNT(*) FROM orders WHERE user_id = users.id) AS order_count
FROM users;

到此这篇关于MySQL DML基本操作示例详解的文章就介绍到这了,更多相关MySQL DML操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql创建通用设备管理信息系统数据库

    Mysql创建通用设备管理信息系统数据库

    下面通过图文并茂的方式给大家介绍通用设备管理信息系统数据库的创建过程,感兴趣的朋友一起学习
    2016-04-04
  • 初始化MySQL用户(删除匿名用户)

    初始化MySQL用户(删除匿名用户)

    安装完MySQL后,系统默认会创建一个不需要密码的root用户,和一个无用户名无密码的匿名用户(Anonymous Account)。进行下面的初始化操作以合理授权,增强安全
    2016-01-01
  • Mysql事务隔离级别之读提交详解

    Mysql事务隔离级别之读提交详解

    这篇文章主要介绍了Mysql事务隔离级别之读提交详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 浅谈Mysql8和mysql5.7的区别

    浅谈Mysql8和mysql5.7的区别

    本文主要介绍了Mysql8和mysql5.7的区别,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • MySQL 不允许从远程访问的解决方法

    MySQL 不允许从远程访问的解决方法

    MySQL 不允许从远程访问的原因有很多除了下面的方法,还有需要看服务器安全设置禁止访问本机的3306端口。
    2010-03-03
  • MySQL数据库定时任务举例讲解

    MySQL数据库定时任务举例讲解

    最近项目里面的后台需要用到定时任务,而MySQL从5.0开始自带了定时事件操作,所以学习下并做下记录,下面这篇文章主要给大家介绍了关于MySQL数据库定时任务的相关资料,需要的朋友可以参考下
    2023-06-06
  • MySQL中NULL对索引的影响深入讲解

    MySQL中NULL对索引的影响深入讲解

    这篇文章主要给大家介绍了关于MySQL中NULL对索引的影响的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • 详谈mysql order by in 的字符顺序(推荐)

    详谈mysql order by in 的字符顺序(推荐)

    下面小编就为大家带来一篇详谈mysql order by in 的字符顺序(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 详解MySQL事务的隔离级别与MVCC

    详解MySQL事务的隔离级别与MVCC

    这篇文章主要介绍了MySQL事务的隔离级别与MVCC的相关资料,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-04-04
  • MySQL使用binlog2sql工具实现在线恢复数据功能

    MySQL使用binlog2sql工具实现在线恢复数据功能

    binlog2sql 是大众点评开源的一款用于解析 MySQL binlog 的工具,根据不同选项,可以得到原始SQL、回滚SQL等,下面我们就来看看如何使用binlog2sql实现在线恢复数据功能吧
    2025-03-03

最新评论