在日常的后端开发与数据库运维中,MySQL作为最流行的关系型中间件之一,掌握其增删改查(CRUD)操作是每位服务端工程师的必备技能。本文将从实战出发,系统梳理查询、插入、删除、修改的核心语法与高级过滤技巧,帮助你在微服务与后端架构中高效操作数据。
一、查询数据:SELECT 的多种姿势
查询是数据库最频繁的操作,使用 SELECT 语句从表中检索数据。基础语法如下:
✅ 查询全部列:SELECT * FROM 表名;
✅ 查询指定列并设置别名:SELECT 字段 AS 别名 FROM 表名;(AS 可省略)
示例:查询 student 表中所有内容:
SELECT* 列1, 列2, ... -- 指定要查询的列(* 表示所有列)
FROM 表名
[WHERE 条件] -- 筛选行(如:年龄 > 18)
[GROUP BY 列名] -- 按列分组(如:按部门分组统计人数)
[HAVING 分组条件] -- 对分组结果过滤(如:分组后筛选人数 > 5 的组)
[ORDER BY 列名 ASC/DESC]; -- 排序(ASC 升序,DESC 降序)示例:查询 student 表中的 name 列与 age 列:
select name, age from student;
#-- 查询年龄大于20岁的学生,按成绩降序排列
SELECT name, age, score FROM students WHERE age > 20 ORDER BY score DESC;示例:查询 users 表中 age 大于 20 的记录:
SELECT name, age FROM users WHERE age > 20;别名示例:
-- 查询 student 表中的name列 与 age列
select name 名字, age 年龄 from student;
select name as 名字, age as 年龄 from student;1.1 DISTINCT 去重
使用 DISTINCT 获取不重复的数据:
-- 查询 student 表中所有的不同年龄
select distinct age from student;1.2 算术与逻辑运算符
算术运算符:>, <, =, !=, <>, >=, <=
逻辑运算符:AND(且), OR(或), NOT(非)
⚠️ SQL 会先执行 AND 条件,再执行 OR,除非用括号改变优先级:
-- 从 student 表中查询 age >=20 的所有记录
select * from student where age >= 20;-- 从 student 表中查询 age >=20并且成绩高于50分的所有记录
select * from student where age >= 20 and score > 50;
-- 从 student 表中查询 age = 15 或 score = 70 的所有记录
select * from student where age = 15 or score = 70;1.3 正则表达式过滤
使用 REGEXP 进行模式匹配:
--从 student 表中查询 name 含有李的所有记录
select * from student where name regexp '李';
--从 student 表中查询 name 含有李或三的所有记录
select * from student where name regexp '李|三';
--从 student 表中查询 name 为李开头的所有记录
select * from student where name regexp '^李';
--从 student 表中查询 name 为五结尾的所有记录
select * from student where name regexp '五$';- 字符 .:匹配任意单个字符:
--从 student 表中查询 name 含'赵'和'真'两个字符且中间只隔了一个字符的所有记录 select * from student where name regexp '赵.真'; - 字符 * 和 +:* 匹配 0 个或多个,+ 匹配至少 1 个:
-- 从 student 表中查询 name 含丰字的所有记录(三*表示丰字前面可以有0-无数个三,因此至少含有丰**) select * from student where name regexp '三*丰'; -- 从 student 表中查询 name 含丰且前面只少有一个三的所有记录(三+表示丰字前面至少个三,因此至少含有三丰) select * from student where name regexp '三+丰'; -- 从 student 表中查询 name 包含李、三、 真 3 个字符中任意一个的记录 select * from student where name regexp '[李三真]'; - 方括号 [ ]:指定字符集合,如 [a-z]、[0-9]:
-- 查询 name 字段值包含字母 a~t 以外的字符的所有记录** select * from student where name regexp'[^a-t]'; - 重复次数:{n,} 至少 n 次,{n,m} 介于 n 到 m 次:
-- 查询 name 字段值出现字母‘e’ 至少 2 次的记录 select * from student where name regexp'e{2,}';
常用正则匹配方式一览:
1.4 模糊查询与范围查询
模糊查询 LIKE:
-- 从 student 表中查询 name 中含有 '张' 的所有记录
select * from student where name like '%张%';
-- 从 student 表中查询 name 中姓 '张' 的所有记录
select * from student where name like '张%';范围查询 IN / NOT IN:
-- 从 student 表中查询 age 为 (18, 19, 20) 之间的所有记录
select * from student where age in(18, 19, 20);
-- 从 student 表中查询 除了age 为 (18, 19, 20) 之间的所有记录
select * from student where age not in(18, 19, 20);连续范围 BETWEEN … AND …:
-- 从 student 表中查询 age 为 (18, 19, 20) 之间的所有记录
select * from student where age between 18 and 20;1.5 空值判断
判断字段是否为 NULL:
**--从 student 表中查询 age 未填写(为空)的所有记录**
select * from student where age is null;二、插入数据:INSERT INTO 的正确用法
向表中插入新记录使用 INSERT INTO 语句:
✅ 插入指定列:INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);
✅ 插入完整记录(不推荐省略列名):INSERT INTO 表名 VALUES (值1, 值2, ...);
完整语法:
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...);示例:向 users 表插入一条记录:
INSERT INTO users (name, age, email) VALUES ('张三', 25, 'zhangsan@example.com');更多示例:
-- 插入学生信息(指定列,推荐方式)
INSERT INTO students (name, age, gender) VALUES ('李四', 22, '男');
-- 批量插入多条记录
INSERT INTO students (name, age) VALUES ('王五', 21), ('赵六', 20);三、更新数据:UPDATE 的谨慎之道
更新现有记录使用 UPDATE 语句:
语法:
UPDATE 表名 SET 字段1=值1, 字段2=值2, ... WHERE 条件;示例:更新 users 表中 id 为 2 的记录的 age 字段:
UPDATE users SET age = 30 WHERE id = 2;实践建议:在微服务架构中,更新操作常配合乐观锁或版本号字段,避免并发冲突导致数据不一致。
[AFFILIATE_SLOT_1]
四、删除数据:DELETE 的安全策略
删除记录使用 DELETE FROM 语句:
语法:
DELETE FROM 表名 WHERE 条件;示例:删除 users 表中 id 为 1 的记录:
DELETE FROM users WHERE id = 1;示例:删除 ID 为 5 的学生记录:
DELETE FROM students WHERE id = 5;⚠️ 安全提醒:执行 DELETE 时务必确认 WHERE 条件,否则会清空全表。在后端架构中,建议使用逻辑删除(如增加 is_deleted 字段)代替物理删除,便于数据追溯。
五、注意事项与最佳实践
- 查询优化:使用
ORDER BY、LIMIT等子句控制结果集,减少不必要的数据传输。 - ⚡ 索引利用:在 WHERE、JOIN、ORDER BY 涉及的列上建立索引,提升查询性能。
- ️ 事务保障:在微服务场景下,对 INSERT、UPDATE、DELETE 组合操作使用事务,保证数据一致性。
- 备份先行:执行批量修改或删除前,先备份相关表或导出 SQL 语句。
[AFFILIATE_SLOT_2]

总结:本文从 SELECT、INSERT、UPDATE、DELETE 四大核心操作出发,结合正则、模糊查询、范围过滤等高级技巧,为你构建了完整的 MySQL 操作知识体系。无论你是后端开发新手还是中间件运维老手,掌握这些基础都将为你的服务端技能树打下坚实基础。建议在实际项目中多练习、多实践,逐步内化为肌肉记忆。
浙公网安备 33010602011771号