MySQL 基础语句
MySQL 是一种常用的关系型数据库管理系统。
在 MySQL 中,我们主要使用 SQL 语句完成:
text
数据库操作
表操作
数据增删改查
条件查询
排序
分组
聚合
连接查询1. 登录 MySQL
终端中常见:
bash
mysql -u root -p其中:
text
mysql → 启动 MySQL 客户端
-u → 指定用户名
root → 用户名
-p → 使用密码登录登录后会进入:
text
mysql>提示符。
数据库操作
2. 查看所有数据库
sql
SHOW DATABASES;3. 创建数据库
sql
CREATE DATABASE school;为了避免数据库已经存在时报错,可以写:
sql
CREATE DATABASE IF NOT EXISTS school;4. 使用数据库
sql
USE school;执行后,后续表操作默认针对:
text
school数据库。
5. 查看当前正在使用的数据库
sql
SELECT DATABASE();6. 删除数据库
sql
DROP DATABASE school;更加安全的写法:
sql
DROP DATABASE IF EXISTS school;注意:
DROP DATABASE会直接删除整个数据库以及其中的数据。
表操作
7. 查看当前数据库中的表
sql
SHOW TABLES;8. 创建表
例如创建学生表:
sql
CREATE TABLE students (
id INT,
name VARCHAR(50),
age INT
);9. 创建常见完整表
sql
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT,
gender VARCHAR(10),
score DECIMAL(5, 2)
);这里包含:
text
id → 学生编号
name → 姓名
age → 年龄
gender → 性别
score → 成绩常见数据类型
10. INT
整数:
sql
age INT例如:
text
18
20
10011. VARCHAR
可变长度字符串:
sql
name VARCHAR(50)表示最多保存:
text
50 个字符常用于:
text
姓名
用户名
地址
标题12. CHAR
固定长度字符串:
sql
gender CHAR(1)适合长度比较固定的数据。
例如:
text
M
F13. DECIMAL
用于保存精确小数:
sql
price DECIMAL(10, 2)其中:
text
10 → 总位数
2 → 小数位数例如:
text
12345.67金额数据通常更适合使用 DECIMAL。
14. DATE
保存日期:
sql
birthday DATE格式:
text
YYYY-MM-DD例如:
text
2026-09-0115. DATETIME
保存日期和时间:
sql
created_at DATETIME例如:
text
2026-09-01 20:30:0016. BOOLEAN
MySQL 中可以写:
sql
is_active BOOLEAN例如:
sql
TRUE
FALSE在 MySQL 中,BOOLEAN 本质上通常会映射成整数类型。
可以简单理解:
text
TRUE → 1
FALSE → 0字段约束
17. PRIMARY KEY
主键:
sql
id INT PRIMARY KEY主键具有:
text
唯一
不能为空的特点。
一个表通常会设置一个主键。
18. AUTO_INCREMENT
自动增长:
sql
id INT PRIMARY KEY AUTO_INCREMENT插入数据时可以不用手动指定 id。
例如:
sql
INSERT INTO students (name, age)
VALUES ('Tom', 18);MySQL 会自动生成:
text
id19. NOT NULL
不能为空:
sql
name VARCHAR(50) NOT NULL表示插入数据时:
text
name必须有值。
20. UNIQUE
唯一约束:
sql
email VARCHAR(100) UNIQUE表示不同记录中的:
text
email不能重复。
21. DEFAULT
默认值:
sql
status VARCHAR(20) DEFAULT 'active'如果插入数据时没有填写 status:
sql
INSERT INTO users (name)
VALUES ('Tom');那么默认:
text
status = active查看表结构
22. DESC
sql
DESC students;也可以:
sql
DESCRIBE students;可以查看:
text
字段名
数据类型
是否允许 NULL
主键
默认值
额外属性23. 查看建表语句
sql
SHOW CREATE TABLE students;可以看到 MySQL 实际使用的完整建表 SQL。
修改表结构
24. 添加字段
sql
ALTER TABLE students
ADD email VARCHAR(100);25. 删除字段
sql
ALTER TABLE students
DROP COLUMN email;26. 修改字段类型
例如:
sql
ALTER TABLE students
MODIFY age TINYINT;27. 修改字段名
MySQL 可以使用:
sql
ALTER TABLE students
RENAME COLUMN name TO student_name;28. 修改表名
sql
RENAME TABLE students TO student;也可以:
sql
ALTER TABLE students
RENAME TO student;插入数据
29. INSERT INTO
基本格式:
sql
INSERT INTO 表名 (字段1, 字段2)
VALUES (值1, 值2);例如:
sql
INSERT INTO students (name, age)
VALUES ('Tom', 18);30. 插入完整数据
假设表结构:
sql
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT,
score DECIMAL(5, 2)
);插入:
sql
INSERT INTO students (name, age, score)
VALUES ('Tom', 18, 90.5);31. 一次插入多条数据
sql
INSERT INTO students (name, age, score)
VALUES
('Tom', 18, 90.5),
('Jack', 20, 85.0),
('Alice', 19, 95.5);查询数据
32. 查询所有数据
sql
SELECT * FROM students;其中:
text
*表示所有字段。
33. 查询指定字段
sql
SELECT name, age
FROM students;34. 给字段设置别名
sql
SELECT name AS student_name,
score AS student_score
FROM students;AS 可以省略:
sql
SELECT name student_name
FROM students;不过初学阶段建议保留 AS,更清楚。
条件查询
35. WHERE
基本格式:
sql
SELECT *
FROM students
WHERE 条件;例如:
sql
SELECT *
FROM students
WHERE age >= 18;36. 等于
SQL 中判断相等使用:
sql
=例如:
sql
SELECT *
FROM students
WHERE name = 'Tom';注意:
SQL 的相等判断是
=,不是 JavaScript 中的==或===。
37. 不等于
MySQL 常用:
sql
<>或者:
sql
!=例如:
sql
SELECT *
FROM students
WHERE age != 18;38. 大于和小于
sql
>
<
>=
<=例如:
sql
SELECT *
FROM students
WHERE score >= 90;逻辑条件
39. AND
多个条件同时满足:
sql
SELECT *
FROM students
WHERE age >= 18
AND score >= 90;40. OR
满足其中一个条件:
sql
SELECT *
FROM students
WHERE age < 18
OR score >= 90;41. NOT
取反:
sql
SELECT *
FROM students
WHERE NOT age = 18;范围查询
42. BETWEEN
查询一个范围:
sql
SELECT *
FROM students
WHERE score BETWEEN 80 AND 90;通常包含:
text
80
90两个边界值。
等价于类似:
sql
WHERE score >= 80
AND score <= 9043. IN
判断是否属于多个值中的一个:
sql
SELECT *
FROM students
WHERE age IN (18, 19, 20);相当于:
sql
WHERE age = 18
OR age = 19
OR age = 2044. NOT IN
sql
SELECT *
FROM students
WHERE age NOT IN (18, 19, 20);模糊查询
45. LIKE
用于模糊匹配字符串。
例如:
sql
SELECT *
FROM students
WHERE name LIKE 'T%';表示:
查询以 T 开头的名字。
46. %
% 表示任意数量的字符。
例如:
sql
LIKE 'T%'表示:
text
T 开头sql
LIKE '%m'表示:
text
m 结尾sql
LIKE '%om%'表示:
text
包含 om47. _
下划线:
text
_表示:
任意一个字符。
例如:
sql
WHERE name LIKE 'T_m';可以匹配类似:
text
Tom
TimNULL
48. 判断 NULL
不能直接写:
sql
WHERE email = NULL;应该写:
sql
WHERE email IS NULL;49. 判断不是 NULL
sql
WHERE email IS NOT NULL;可以记住:
text
NULL 不使用 =
NULL 使用 IS排序
50. ORDER BY
排序:
sql
SELECT *
FROM students
ORDER BY score;默认:
text
升序51. ASC
升序:
sql
SELECT *
FROM students
ORDER BY score ASC;例如:
text
60
70
80
9052. DESC
降序:
sql
SELECT *
FROM students
ORDER BY score DESC;例如:
text
90
80
70
60注意这里的:
sql
DESC students;和:
sql
ORDER BY score DESC;虽然都出现 DESC,但作用不同。
前者:
text
查看表结构后者:
text
降序排列53. 多字段排序
sql
SELECT *
FROM students
ORDER BY age ASC, score DESC;含义:
text
先按年龄升序
年龄相同:
再按成绩降序限制查询数量
54. LIMIT
只查询前几条:
sql
SELECT *
FROM students
LIMIT 5;表示:
text
最多返回 5 条55. LIMIT 偏移量
例如:
sql
SELECT *
FROM students
LIMIT 5, 10;表示:
text
跳过前 5 条
再查询 10 条也可以写:
sql
SELECT *
FROM students
LIMIT 10 OFFSET 5;修改数据
56. UPDATE
基本格式:
sql
UPDATE 表名
SET 字段 = 值
WHERE 条件;例如:
sql
UPDATE students
SET score = 100
WHERE id = 1;57. 一次修改多个字段
sql
UPDATE students
SET age = 19,
score = 95
WHERE id = 1;注意:
UPDATE时一定要特别注意WHERE条件。
如果写:
sql
UPDATE students
SET score = 100;那么:
text
所有学生的 score 都会变成 100删除数据
58. DELETE
基本格式:
sql
DELETE FROM students
WHERE id = 1;59. 删除所有数据
sql
DELETE FROM students;会删除表中的全部记录,但:
text
表结构还在DELETE、TRUNCATE、DROP
60. DELETE
sql
DELETE FROM students;作用:
text
删除表中的数据
保留表结构61. TRUNCATE
sql
TRUNCATE TABLE students;作用:
text
清空整张表的数据
保留表结构通常比逐行 DELETE 更适合直接清空整张表。
AUTO_INCREMENT 计数通常也会重新开始。
62. DROP
sql
DROP TABLE students;作用:
text
数据删除
表结构也删除可以简单记:
text
DELETE → 删除数据
TRUNCATE → 清空表
DROP → 删除整张表聚合函数
63. COUNT()
统计数量:
sql
SELECT COUNT(*)
FROM students;64. SUM()
求和:
sql
SELECT SUM(score)
FROM students;65. AVG()
平均值:
sql
SELECT AVG(score)
FROM students;66. MAX()
最大值:
sql
SELECT MAX(score)
FROM students;67. MIN()
最小值:
sql
SELECT MIN(score)
FROM students;常见聚合函数:
text
COUNT() → 数量
SUM() → 总和
AVG() → 平均值
MAX() → 最大值
MIN() → 最小值分组查询
68. GROUP BY
例如统计不同年龄的人数:
sql
SELECT age, COUNT(*)
FROM students
GROUP BY age;假设数据:
text
Tom 18
Jack 18
Alice 19结果类似:
text
18 → 2
19 → 169. HAVING
HAVING 用于过滤分组后的结果。
例如:
sql
SELECT age, COUNT(*) AS count
FROM students
GROUP BY age
HAVING COUNT(*) >= 2;70. WHERE 和 HAVING
可以简单区分:
text
WHERE → 分组之前过滤数据
HAVING → 分组之后过滤结果例如:
sql
SELECT age, AVG(score)
FROM students
WHERE score >= 60
GROUP BY age
HAVING AVG(score) >= 80;执行思路:
text
WHERE
↓
GROUP BY
↓
HAVING去重
71. DISTINCT
去除重复结果:
sql
SELECT DISTINCT age
FROM students;例如原数据:
text
18
18
19
19
20查询结果:
text
18
19
20MySQL 常用函数
72. CONCAT()
拼接字符串:
sql
SELECT CONCAT(name, '-', age)
FROM students;例如:
text
Tom-1873. LENGTH()
获取字符串长度:
sql
SELECT LENGTH(name)
FROM students;需要注意:
MySQL 的
LENGTH()返回的是字节长度。
如果想按字符数量统计,可以使用:
sql
CHAR_LENGTH(name)74. NOW()
获取当前日期和时间:
sql
SELECT NOW();75. CURDATE()
获取当前日期:
sql
SELECT CURDATE();76. CURTIME()
获取当前时间:
sql
SELECT CURTIME();多表基础
77. 外键概念
例如有两个表:
text
students
classes学生表:
sql
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
class_id INT
);班级表:
sql
CREATE TABLE classes (
id INT PRIMARY KEY AUTO_INCREMENT,
class_name VARCHAR(50)
);这里:
text
students.class_id可以用于关联:
text
classes.idJOIN
78. INNER JOIN
只查询两个表能够匹配的数据:
sql
SELECT students.name,
classes.class_name
FROM students
INNER JOIN classes
ON students.class_id = classes.id;79. LEFT JOIN
保留左表全部数据:
sql
SELECT students.name,
classes.class_name
FROM students
LEFT JOIN classes
ON students.class_id = classes.id;即使某个学生没有对应班级:
text
学生仍然会出现在结果中
班级部分可能为 NULL执行顺序基础理解
一个比较完整的查询可能是:
sql
SELECT age, AVG(score) AS avg_score
FROM students
WHERE score >= 60
GROUP BY age
HAVING AVG(score) >= 80
ORDER BY avg_score DESC
LIMIT 5;书写顺序:
text
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT初学阶段可以先按照这个顺序记忆。
MySQL 注释
80. 单行注释
可以使用:
sql
-- 查询所有学生
SELECT * FROM students;注意:
text
-- 后面通常需要有一个空格81. # 注释
MySQL 还支持:
sql
# 查询学生
SELECT * FROM students;82. 多行注释
sql
/*
查询
所有学生
*/
SELECT * FROM students;一个完整练习
首先创建数据库:
sql
CREATE DATABASE IF NOT EXISTS school;
USE school;创建表:
sql
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT,
score DECIMAL(5, 2)
);插入数据:
sql
INSERT INTO students (name, age, score)
VALUES
('Tom', 18, 85.5),
('Jack', 20, 92.0),
('Alice', 19, 96.5),
('Bob', 18, 70.0);查询所有数据:
sql
SELECT *
FROM students;查询成绩大于等于 90:
sql
SELECT name, score
FROM students
WHERE score >= 90;按成绩降序:
sql
SELECT *
FROM students
ORDER BY score DESC;查询平均成绩:
sql
SELECT AVG(score)
FROM students;按照年龄分组:
sql
SELECT age,
COUNT(*) AS student_count,
AVG(score) AS avg_score
FROM students
GROUP BY age;修改数据:
sql
UPDATE students
SET score = 90
WHERE id = 1;删除数据:
sql
DELETE FROM students
WHERE id = 4;MySQL 基础语句速查
| 功能 | MySQL |
|---|---|
| 查看数据库 | SHOW DATABASES; |
| 创建数据库 | CREATE DATABASE db; |
| 使用数据库 | USE db; |
| 删除数据库 | DROP DATABASE db; |
| 查看表 | SHOW TABLES; |
| 查看表结构 | DESC table_name; |
| 创建表 | CREATE TABLE |
| 修改表 | ALTER TABLE |
| 删除表 | DROP TABLE |
| 插入数据 | INSERT INTO |
| 查询数据 | SELECT |
| 条件查询 | WHERE |
| 修改数据 | UPDATE |
| 删除数据 | DELETE |
| 清空表 | TRUNCATE TABLE |
| 排序 | ORDER BY |
| 去重 | DISTINCT |
| 限制数量 | LIMIT |
| 分组 | GROUP BY |
| 分组过滤 | HAVING |
| 统计数量 | COUNT() |
| 求和 | SUM() |
| 平均值 | AVG() |
| 最大值 | MAX() |
| 最小值 | MIN() |
| 模糊查询 | LIKE |
| 范围查询 | BETWEEN |
| 多值查询 | IN |
| 内连接 | INNER JOIN |
| 左连接 | LEFT JOIN |
总结
MySQL 初学阶段最重要的核心其实就是:
text
数据库
↓
表
↓
记录
↓
字段然后掌握四个最核心的数据操作:
text
增
删
改
查对应:
sql
INSERT
DELETE
UPDATE
SELECT也就是常说的:
text
CRUD其中:
text
Create → INSERT
Read → SELECT
Update → UPDATE
Delete → DELETE建议优先熟练掌握:
text
CREATE DATABASE
USE
CREATE TABLE
DESC
INSERT INTO
SELECT
WHERE
UPDATE
DELETE
ORDER BY
LIMIT
COUNT
AVG
MAX
MIN
GROUP BY
HAVING等这些基础语句熟练之后,再继续学习:
text
多表查询
JOIN
子查询
索引
事务
视图
存储过程
用户与权限
数据库设计这样 MySQL 的基础体系就基本建立起来了。