学后端开发绕不开数据库,而MySQL几乎是所有项目的标配。刚入门的时候,很多人面对一堆SQL语句不知道从哪学起,其实MySQL的基础语法并不复杂,只要按照操作数据库、操作表、操作数据这条主线一步步走,很快就能上手。本文把最常用的语法知识点整理出来,每个都配上可以直接执行的示例,方便你边看边练。

一、数据库和表的基本操作
操作MySQL的第一步是创建和管理数据库。创建数据库用CREATE DATABASE,切换到某个数据库用USE,查看已有的数据库列表用SHOW DATABASES。这三条语句是每次连接数据库后几乎都要用到的。
-- 创建数据库,指定字符集避免中文乱码 CREATE DATABASE shop DEFAULT CHARSET utf8mb4; -- 切换数据库 USE shop; -- 查看当前所有数据库 SHOW DATABASES;
数据库建好后,接下来要建表。建表语句的核心是定义字段名、字段类型和约束条件。常用的字段类型有INT(整数)、VARCHAR(n)(变长字符串)、DECIMAL(精确小数,金额字段必用)、DATETIME(日期时间)等。约束方面,PRIMARY KEY表示主键,NOT NULL表示不能为空,AUTO_INCREMENT表示自动递增。
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
username VARCHAR(50) NOT NULL COMMENT '用户名',
balance DECIMAL(10,2) DEFAULT 0 COMMENT '余额',
created_at DATETIME COMMENT '创建时间'
) COMMENT '用户表';
这里有个细节要注意:金额类字段一定不要用FLOAT或DOUBLE,因为浮点数存在精度问题,存储金额会出现误差,用DECIMAL(10,2)才是正确做法。表建好之后,还可以用SHOW TABLES查看表列表,用DESC user查看表结构,用DROP TABLE user删除表。
二、增删改查四大基本操作
对数据的操作概括起来就是增、删、改、查四个字。插入数据用INSERT INTO,可以一次插入一条,也可以批量插入多条。更新数据用UPDATE,删除数据用DELETE,这两条语句都必须带上WHERE条件,否则会作用于全表,这是新手最容易犯的错误。
-- 插入一条数据
INSERT INTO user (username, balance, created_at)
VALUES ('张三', 100.50, '2024-01-15 10:30:00');
-- 批量插入
INSERT INTO user (username, balance) VALUES
('李四', 200.00),
('王五', 300.00);
-- 修改数据,务必带WHERE条件
UPDATE user SET balance = balance + 50 WHERE username = '张三';
-- 删除数据,同样要带条件
DELETE FROM user WHERE id = 3;
查询是SQL中使用频率最高的操作,基础形式是SELECT 字段 FROM 表名。可以用*查所有字段,也可以列出指定字段;DISTINCT用于去重;AS可以给字段起别名。条件过滤用WHERE,支持=、>、<、!=、BETWEEN...AND、IN、LIKE等运算符。
-- 查询余额大于100的用户 SELECT username, balance FROM user WHERE balance > 100; -- 模糊查询,%匹配任意多个字符 SELECT * FROM user WHERE username LIKE '张%'; -- 范围查询 SELECT * FROM user WHERE id BETWEEN 1 AND 10;
三、排序、分页与聚合函数
实际业务中经常需要对结果排序和分页展示。排序用ORDER BY,默认是升序ASC,降序要写DESC。分页用LIMIT,写法是LIMIT 起始位置, 每页条数,起始位置从0开始算。比如每页显示10条,查第3页就是LIMIT 20, 10。开发中分页参数需要根据页码动态计算:起始位置等于(页码减1)乘以每页条数。
-- 按余额降序排列,取前5名 SELECT username, balance FROM user ORDER BY balance DESC LIMIT 0, 5;
聚合函数用来做统计计算,常用的有COUNT统计行数、SUM求和、AVG求平均值、MAX求最大值、MIN求最小值。配合GROUP BY可以分组统计,比如统计每个城市的用户数。这里有个高频面试考点:WHERE和HAVING的区别。WHERE在分组前过滤原始数据,不能用聚合函数;HAVING在分组后过滤统计结果,可以配合聚合函数使用。
-- 统计每个用户名的订单总数,只显示订单数大于5的 SELECT username, COUNT(*) AS order_count FROM orders GROUP BY username HAVING COUNT(*) > 5;
四、多表连接查询
真实项目的数据往往分散在多张表里,比如用户表和订单表,这时就需要连接查询。最常用的是内连接INNER JOIN,只返回两张表中匹配的记录;左连接LEFT JOIN以左表为主,右表没有匹配的补NULL;右连接RIGHT JOIN则相反。连接时通过ON指定两表的关联条件,通常是主表主键等于从表的外键。
-- 查询每个用户的订单金额,内连接 SELECT u.username, o.amount FROM user u INNER JOIN orders o ON u.id = o.user_id; -- 左连接:没有订单的用户也要显示出来 SELECT u.username, o.amount FROM user u LEFT JOIN orders o ON u.id = o.user_id;
写连接查询时建议都给表起别名,语句更简洁易读。另外要注意连接字段最好是索引字段,数据量大时没有索引的连接查询会非常慢。掌握了数据库操作、表的创建、增删改查、聚合统计和多表连接这几个部分,MySQL基础语法的主干就齐了,剩下的子查询、索引优化等内容,可以在这个基础上继续深入。