MySQL核心操作:从插入到查询全解析
MySQL 插入与查询操作笔记
一、数据插入操作
1. 基本插入语法
- 指定列插入INSERT [INTO] table_name (column1, column2, ...) VALUES (value1, value2, ...); 仅为指定的列插入数据。
- 全列插入INSERT [INTO] table_name VALUES (value1, value2, ...); 省略列名,默认按表结构顺序插入所有列。
- 省略 INTOinsert into 中的 into 可以省略。
- 多行插入INSERT INTO table_name (column1, ...) VALUES (v1, v2), (v3, v4), ...; 在 VALUES 后用逗号分隔多组数据,实现批量插入。
2. 插入并更新(Upsert)
- 语法:INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value] ...;
- 执行结果说明:
- 1 row affected:表中没有冲突数据,数据被插入
- 2 row affected:表中有冲突数据,且数据已被更新
3. 替换插入
- REPLACE INTO例如:REPLACE INTO students (sn, name) VALUES (20001, '公瑾');
- 1 row affected:无冲突,直接插入
- 2 rows affected:有冲突,先删除再插入
二、数据查询操作
1. 查询语法
- 全列查询SELECT * FROM exam_result;
- 指定列查询SELECT id, name, english FROM exam_result;
- 表达式查询SELECT id, name, 10 FROM exam_result;
- 查询结果指定别名SELECT column [AS] alias_name [...] FROM table_name;
2. 数据去重
3. 条件筛选与排序
- WHERE 子句
- 运算符 = 对 NULL 不安全
- 判断 NULL 用 IS NULL / IS NOT NULL
- 范围搜索、逻辑运算符、算术运算符
- LIKE 模糊匹配使用 % 进行模糊查询
- ORDER BY 排序
- ASC(升序,默认)
- DESC(降序)
- 语法:SELECT ... FROM table_name [WHERE ...] ORDER BY column [ASC|DESC], ...;
- 注意: NULL 值比任何值都小
4. 限制查询结果
- LIMIT控制返回的行数
- OFFSET跳过指定行数的数据
注意事项:只有数据准备好才能排序,LIMIT 本质上是显示指定范围的数据。
5. 别名与语句执行顺序
- 使用别名可以简化查询结果的字段名
- 理解 SQL 语句的执行顺序有助于优化查询
三、数据更新与删除
1. 更新数据
- UPDATE 语法UPDATE table_name SET column = expr [, column = expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...];
- 注意: 更新操作风险较高,务必加 WHERE 条件
2. 删除数据
- DELETE 语法DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...];
- 注意: 删除操作同样危险,建议加 WHERE 条件
四、去重插入
五、日志与持久化机制
- bin log(归档日志)
- 记录历史 SQL 语句
- 记录数据本身
- redo log(重做日志)
- undo log(回滚日志)
六、聚合与分组
- 聚合函数
- GROUP BY 分组
- HAVING 子句
- 对聚合后的结果进行条件筛选
- WHERE 针对原始数据,HAVING 针对分组后的数据
七、MySQL 查询逻辑总结
- 中间筛选和最终结果,全部都是逻辑上的表,MySQL 一切皆是表
- 只要掌握单表的 CURD 操作,几乎所有 SQL 场景都能用统一方式解决