作为编程小白,提起 MySQL 是不是总觉得一头雾水?一堆英文指令、复杂的表关系、搞不懂的事务…… 别慌!这篇博客把 MySQL 掰开揉碎,用最通俗的话讲清楚核心知识点,跟着学,零基础也能快速上手~

一、MySQL 基础:先搞懂这些 “行话”

1. 什么是 SQL?

SQL 就是操作关系型数据库的 “通用语言”,就像我们和 MySQL 对话的 “翻译器”。不同数据库(比如 Oracle、SQL Server)的 SQL 略有差异(俗称 “方言”),但核心规则都一样。

2. SQL 通用语法(记这几点就够了)

  • 语句以分号结尾,单行 / 多行写都可以;
  • 大小写不敏感(比如SELECTselect一样),但关键字建议大写(更易读);
  • 注释方式:
    • 单行:-- 注释内容# 注释内容(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;

七、最后:小白避坑指南

  1. UPDATE/DELETE一定要加WHERE,否则会改 / 删全表数据;
  2. 字符集尽量用utf8utf8mb4,避免中文乱码;
  3. 查数据优先用SELECT 具体列,别偷懒用SELECT *(效率低);
  4. 多表查询别忘加关联条件,避免笛卡尔积;
  5. 新手先练熟增删改查,再学进阶知识点(事务、视图)。

总结

MySQL 看似复杂,其实核心就是 “增删改查”+ 表关系!小白入门先把 DDL、DML、DQL 的基础指令练熟,再逐步攻克多表查询、约束这些知识点,多敲几遍代码,你会发现:原来 MySQL 这么简单~

如果这篇博客帮到你,记得点赞收藏,后续还会更新 MySQL 进阶(事务、视图、Python 操作 MySQL),关注不迷路~

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐