MySQL 基础 SQL 语法与常用语句速查
掌握 MySQL 的基础 SQL 语法是进行数据库开发的前提。本文从 DDL、DML、DCL 三大语言分类入手,详细拆解数据库与表结构的创建修改、核心数据操作(CRUD)命令,并针对实际开发中常见的分页、排序、多表关联及条件统计提供标准 SQL 实现方案。
SQL 语法体系概述
SQL(Structured Query Language)主要分为三类核心语言,理解其分工有助于构建清晰的数据库操作逻辑:
- DDL (Data Definition Language):数据定义语言,用于定义或改变表的结构,如
CREATE,ALTER,DROP。 - DML (Data Manipulation Language):数据操纵语言,用于操作表中数据,如
SELECT,INSERT,UPDATE,DELETE。 - DCL (Data Control Language):数据控制语言,用于设置用户权限和安全级别,如
GRANT,REVOKE,COMMIT,ROLLBACK。
第1步:数据库与表结构管理(DDL)
在开始数据存储前,需先规划好数据库容器与表结构。以下是标准的建库建表流程及注意事项。
1. 数据库的生命周期
通过以下语句创建或删除数据库。建议在操作前确认名称唯一性,避免冲突。
-- 创建新数据库
CREATE DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 删除指定数据库(谨慎操作,数据不可恢复)
DROP DATABASE database_name;
2. 表的创建与修改
建表时需明确字段类型、约束及主键。若需基于旧表结构新建表,可使用以下两种模式:
-- 方法A:仅复制表结构,不复制数据
CREATE TABLE new_table LIKE old_table;
-- 方法B:复制表结构并带入部分数据(通常用于备份特定查询结果)
CREATE TABLE new_table AS SELECT * FROM old_table WHERE condition;
对已有表进行修改时,需注意:
- 添加列:
ALTER TABLE table_name ADD COLUMN col_name type;。新增列后无法直接删除,只能清空内容或重构表。 - 添加主键:
ALTER TABLE table_name ADD PRIMARY KEY (col_name); - 删除主键:
ALTER TABLE table_name DROP PRIMARY KEY;
3. 索引与视图
索引是提升查询性能的关键,但需注意索引不可直接“更改”,只能通过删除重建来实现调整。
-- 创建普通索引
CREATE INDEX idx_name ON table_name (column_name);
-- 创建唯一索引
CREATE UNIQUE INDEX idx_unique ON table_name (column_name);
-- 删除索引
DROP INDEX idx_name ON table_name;
-- 创建视图(简化复杂查询)
CREATE VIEW view_name AS SELECT ...;
-- 删除视图
DROP VIEW view_name;
第2步:核心数据操作(DML)
DML 是最常用的日常操作,涵盖数据的增加、修改、删除与检索。执行此类操作前,务必确认 WHERE 条件的准确性,防止误操作全表数据。
1. 基础增删改查
| 操作 | 语法示例 |
|---|---|
| 插入数据 | INSERT INTO table (field1, field2) VALUES (value1, value2); |
| 更新数据 | UPDATE table SET field1 = 'new_value' WHERE condition; |
| 删除数据 | DELETE FROM table WHERE condition; |
| 查询数据 | SELECT * FROM table WHERE condition ORDER BY col DESC; |
2. 高级查询技巧
在实际业务中,单一查询往往无法满足需求,需组合使用聚合函数、子查询及集合运算。
3. 集合运算与连接
- UNION / UNION ALL:合并两个查询结果。
UNION自动去重,UNION ALL保留重复行且性能更高。 - LEFT JOIN / RIGHT JOIN:左外连接保留左表所有记录,右连接保留右表所有记录。适用于关联表数据不全的场景。
- BETWEEN ... AND:包含边界值的范围查询,如
WHERE age BETWEEN 18 AND 60。 - IN / NOT IN:判断值是否在指定列表中,如
WHERE status IN ('active', 'pending')。
第3步:实战场景解决方案
以下精选 SQL 场景覆盖了开发中高频出现的数据处理痛点,建议结合实际表结构验证。
1. 分页查询
MySQL 中使用 LIMIT 和 OFFSET 实现高效分页。相比嵌套子查询选取 Top N,此方式更简洁:
-- 每页10条,查询第2页(跳过前10条)
SELECT * FROM table_name ORDER BY id ASC LIMIT 10 OFFSET 10;
2. 消除重复记录
保留每组数据中 ID 最大的一条,删除其余重复项:
DELETE FROM table_name
WHERE id NOT IN (
SELECT max_id FROM (
SELECT MAX(id) as max_id
FROM table_name
GROUP BY duplicate_field
) AS tmp
);
3. 行列转换(透视表)
利用 CASE WHEN 配合聚合函数,将纵向数据转换为横向报表:
-- 统计各月份各部门的业绩(假设表名为 sales)
SELECT
department,
SUM(CASE WHEN month = 'Jan' THEN amount ELSE 0 END) as Jan_Sales,
SUM(CASE WHEN month = 'Feb' THEN amount ELSE 0 END) as Feb_Sales
FROM sales
GROUP BY department;
4. 获取随机记录
在不同数据库中获取随机记录的写法略有差异,MySQL 常用 RAND():
-- 随机选取10条记录
SELECT * FROM table_name ORDER BY RAND() LIMIT 10;
总结
熟练掌握 DDL 与 DML 是 MySQL 开发的基石。对于复杂查询,建议优先使用标准的 JOIN 和 CASE WHEN 结构,这不仅符合 SQL 标准,也更利于后期维护与优化。以上就是 MySQL 基础 SQL 语法的详细内容,更多关于 SQL 进阶技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









