小白也能玩转 MySQL!从入门到实操全攻略
作为编程小白,提起 MySQL 是不是总觉得一头雾水?一堆英文指令、复杂的表关系、搞不懂的事务…… 别慌!这篇博客把 MySQL 掰开揉碎,用最通俗的话讲清楚核心知识点,跟着学,零基础也能快速上手~
一、MySQL 基础:先搞懂这些 “行话”
1. 什么是 SQL?
SQL 就是操作关系型数据库的 “通用语言”,就像我们和 MySQL 对话的 “翻译器”。不同数据库(比如 Oracle、SQL Server)的 SQL 略有差异(俗称 “方言”),但核心规则都一样。
2. SQL 通用语法(记这几点就够了)
- 语句以分号结尾,单行 / 多行写都可以;
- 大小写不敏感(比如
SELECT和select一样),但关键字建议大写(更易读); - 注释方式:
- 单行:
-- 注释内容或# 注释内容(MySQL 专属); - 多行:
/* 注释内容 */。
- 单行:
3. SQL 分 4 大类,别再傻傻分不清
表格
| 分类 | 简称 | 作用 | 核心关键字 |
|---|---|---|---|
| 数据定义语言 | DDL | 创库、创表、改表结构 | create、drop、alter |
| 数据操纵语言 | DML | 增删改表中数据 | insert、delete、update |
| 数据查询语言 | DQL | 查数据(最常用) | select、where |
| 数据控制语言 | DCL | 管理用户、授权 | grant、revoke |
二、核心操作:DDL(玩转数据库和表)
1. 操作数据库:CRUD 入门
CRUD 是啥?就是增 (Create)、查 (Retrieve)、改 (Update)、删 (Delete),贯穿 MySQL 所有操作!
(1)创建数据库(C)
sql
-- 基础创建
CREATE DATABASE 数据库名;
-- 更稳妥:先判断不存在再创建,还指定字符集(避免乱码)
CREATE DATABASE IF NOT EXISTS db4 CHARACTER SET gbk;
(2)查询数据库(R)
sql
-- 查所有数据库名
SHOW DATABASES;
-- 查某个数据库的创建信息(含字符集)
SHOW CREATE DATABASE 数据库名;
(3)修改数据库(U)
sql
-- 改数据库字符集
ALTER DATABASE db4 CHARACTER SET utf8;
(4)删除数据库(D)
sql
-- 先判断存在再删除(避免报错)
DROP DATABASE IF EXISTS 数据库名;
(5)使用数据库
sql
USE 数据库名;
-- 查当前在用的数据库
SELECT DATABASE();
2. 操作表:建表、改表、删表
(1)创建表(C)
先记常用数据类型(小白必背):
int:整数(比如年龄age int);double(5,2):小数(总长度 5,小数点后 2 位,比如分数score double(4,1));date:日期(年月日,比如生日birthday date);varchar(20):字符串(比如姓名name varchar(32));
建表示例(创建学生表):
sql
CREATE TABLE student(
id INT, -- 学号
name VARCHAR(32),-- 姓名
age INT, -- 年龄
score DOUBLE(4,1),-- 分数
birthday DATE -- 生日
);
(2)查询表(R)
sql
-- 查当前库所有表名
SHOW TABLES;
-- 查表结构(看每列的类型、约束)
DESC student;
(3)修改表(U)
sql
-- 改表名
ALTER TABLE student RENAME TO stu;
-- 加一列(比如加“性别”列)
ALTER TABLE student ADD gender VARCHAR(2);
-- 改列类型(比如把name长度改成50)
ALTER TABLE student MODIFY name VARCHAR(50);
-- 删列(比如删掉gender列)
ALTER TABLE student DROP gender;
(4)删除表(D)
sql
DROP TABLE IF EXISTS student;
三、核心操作:DML(增删改表数据)
表建好后,终于可以往里面填数据了!
1. 新增数据(insert)
sql
-- 指定列新增(推荐,不容易错)
INSERT INTO student(id, name, age) VALUES (1, '张三', 18);
-- 不指定列(按表列顺序填值)
INSERT INTO student VALUES (2, '李四', 20, 90.5, '2003-01-01');
💡 注意:字符串、日期要加引号(单双都可以),数字直接写。
2. 修改数据(update)
sql
-- 改指定数据(必加where,否则改全表!)
UPDATE student SET score = 95 WHERE id = 1;
-- 改多列
UPDATE student SET age = 19, score = 98 WHERE name = '李四';
3. 删除数据(delete)
sql
-- 删除指定数据(加where!)
DELETE FROM student WHERE id = 2;
-- 清空表(推荐用这个,效率更高)
TRUNCATE TABLE student;
💡 区别:DELETE是逐条删,TRUNCATE是先删表再重建,数据量大时选后者。
四、核心操作:DQL(查询数据,最常用!)
查询是 MySQL 用得最多的操作,记住这个万能语法框架:
sql
SELECT 要查的字段 FROM 表名
WHERE 条件
GROUP BY 分组字段
HAVING 分组后条件
ORDER BY 排序字段
LIMIT 分页;
1. 基础查询
sql
-- 查指定列
SELECT name, age FROM student;
-- 查所有列(懒人写法,正式开发不推荐)
SELECT * FROM student;
-- 去重(比如查所有不重复的年龄)
SELECT DISTINCT age FROM student;
-- 起别名(更易读)
SELECT name AS 姓名, score AS 分数 FROM student;
2. 条件查询(where)
记住常用运算符:
- 比较:
>、<、>=、<=、=、!=(或<>); - 范围:
BETWEEN 最小值 AND 最大值; - 集合:
IN(值1, 值2); - 模糊查询:
LIKE(_匹配 1 个字符,%匹配任意个字符); - 空值:
IS NULL/IS NOT NULL;
示例:
sql
-- 查年龄大于20的学生
SELECT * FROM student WHERE age > 20;
-- 查分数在80-90之间的学生
SELECT * FROM student WHERE score BETWEEN 80 AND 90;
-- 查名字以“张”开头的学生
SELECT * FROM student WHERE name LIKE '张%';
-- 查名字是两个字的学生
SELECT * FROM student WHERE name LIKE '__';
3. 排序查询(order by)
sql
-- 按分数升序(ASC可省略)
SELECT * FROM student ORDER BY score ASC;
-- 按分数降序,分数相同按年龄升序
SELECT * FROM student ORDER BY score DESC, age ASC;
4. 聚合函数(统计数据)
表格
| 函数 | 作用 |
|---|---|
| COUNT (列名) | 统计行数(推荐用主键列,避免 null) |
| MAX (列名) | 求最大值 |
| MIN (列名) | 求最小值 |
| SUM (列名) | 求和 |
| AVG (列名) | 求平均值 |
示例:
sql
-- 统计学生总数
SELECT COUNT(id) FROM student;
-- 求分数的平均值
SELECT AVG(score) FROM student;
5. 分页查询(limit)
小白必记公式:开始索引 = (页码-1) * 每页条数
sql
-- 每页3条,查第1页
SELECT * FROM student LIMIT 0, 3;
-- 每页3条,查第2页
SELECT * FROM student LIMIT 3, 3;
五、小白进阶:多表查询(告别单表局限)
实际开发中,数据不会都存在一张表里(比如 “部门表” 和 “员工表”),这时候需要多表关联查询。
1. 先搞懂 “笛卡尔积”(避坑关键)
直接查两张表会出现 “无效数据”,比如部门表 3 条、员工表 5 条,直接查会出 15 条结果,需要用WHERE消除无用数据。
2. 内连接(查两张表的 “交集”)
sql
-- 隐式内连接(常用)
SELECT 员工名, 部门名 FROM emp, dept WHERE emp.dept_id = dept.id;
-- 显式内连接(更易读)
SELECT 员工名, 部门名 FROM emp INNER JOIN dept ON emp.dept_id = dept.id;
3. 子查询(查询里套查询)
比如 “查工资最高的员工”:
sql
-- 第一步:查最高工资
SELECT MAX(salary) FROM emp;
-- 第二步:查工资等于最高值的员工
SELECT * FROM emp WHERE salary = (SELECT MAX(salary) FROM emp);
六、必知小技巧:约束和索引
1. 约束:保证数据不乱
- 非空约束(not null):列值不能为 null(比如姓名不能为空);
- 唯一约束(unique):列值不能重复(比如手机号);
- 主键约束(primary key):非空 + 唯一(表的 “唯一标识”,比如学号);
- 主键自增:
id INT PRIMARY KEY AUTO_INCREMENT;
- 主键自增:
- 外键约束(foreign key):关联两张表(比如员工表的 dept_id 关联部门表的 id)。
2. 索引:让查询更快
就像书的目录,给常用查询的列加索引,能大幅提升速度:
sql
-- 给student表的name列加普通索引
CREATE INDEX idx_stu_name ON student(name);
-- 删除索引
DROP INDEX idx_stu_name ON student;
七、最后:小白避坑指南
- 写
UPDATE/DELETE一定要加WHERE,否则会改 / 删全表数据; - 字符集尽量用
utf8或utf8mb4,避免中文乱码; - 查数据优先用
SELECT 具体列,别偷懒用SELECT *(效率低); - 多表查询别忘加关联条件,避免笛卡尔积;
- 新手先练熟增删改查,再学进阶知识点(事务、视图)。
总结
MySQL 看似复杂,其实核心就是 “增删改查”+ 表关系!小白入门先把 DDL、DML、DQL 的基础指令练熟,再逐步攻克多表查询、约束这些知识点,多敲几遍代码,你会发现:原来 MySQL 这么简单~
如果这篇博客帮到你,记得点赞收藏,后续还会更新 MySQL 进阶(事务、视图、Python 操作 MySQL),关注不迷路~
更多推荐




所有评论(0)