当前位置: 首页 > news >正文

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 示例详解

2.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;
http://www.sczhlp.com/news/80849/

相关文章:

  • 网站生鲜建设市场分析免费 建站
  • 北京的网站建设公司做网站的几个软件
  • 工作作风建设网站自己做的网站服务器在哪里
  • 做网站时应该用什么软件域名上面怎么建设网站
  • 怎么可以自己制作网站百度关键词快速排名
  • 网站建设一点通pre_get_posts wordpress
  • 可信网站认证购买wordpress什么版本快
  • 网站注册域名免费旅游景点网页
  • 发外链的网站都要企业注册一级域名免费网站怎么申请
  • 建设工程资质录入是在那个网站权威发布意思
  • Flink 与Flink可视化平台StreamPark教程(开篇)
  • IsMyTouchScreenOK(触摸屏坏点检测)多语便携版 - 详解
  • 安防视频汇聚系统EasyCVR下载十几秒的录像报错404?原因竟是一个不起眼的“/”
  • 中国建设银行卖狗年纪念币官方网站秦皇岛做网站的公司哪家好
  • 网站后台配置帮人推广的平台
  • 江门网站制作方案定制wordpress访问仪表盘
  • Gitee Wiki如何解决关键领域软件研发的知识管理困局
  • 三角函数的余弦定理的证明
  • 格子达检测怎么降aigc,两个方法
  • iPad安装Windows系统的可行性与性能表现分析
  • wordpress仿站上传到给自己的网站做关键词流程
  • 网站空间可以自己做服务器淘宝客用wordpress好吗
  • 在站点上新建网页上海中学国际部
  • 财税公司做网站网页设计实验总结100字
  • 普通话手抄报文字内容济南百度seo
  • 公司做网站需要好多钱网站辅助导航
  • 站长工具集我为什么不建议年轻人做销售
  • 网站设计 网站开发 西安微信公众平台开发工具
  • DW网站建设出现哪些问题浙江省建设信息港的网站
  • 网站建设基本技术工业设计公司如何选择