MySQL DML基本操作示例详解
作者: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操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!