MySQL 小白秘籍|看完直接上手,避开 90% 坑(开发入门必备)
2026/9/14 22:16:31 网站建设 项目流程

很多刚入行的小伙伴一看到 MySQL 就头大,什么 B + 树、MVCC、事务隔离级别,一大堆名词越看越懵。

其实小白学 MySQL,不用一上来啃底层源码。先把常用语法、踩坑点、简单优化学会,足够应付日常开发和面试基础题。

这篇就是专为小白准备的秘籍,不讲复杂原理,只讲实操、口诀、避坑要点。


一、建表必守的 5 条简单规矩

写 SQL 第一步就是建表,表设计不好,后面全是坑。

✅ 1. 每张表都要有主键 id 推荐用id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,自增主键,简单稳定。不要用手机号、身份证做主键。

✅ 2. 字段尽量选合适小类型 能用 int 就不用 bigint;非负数加 UNSIGNED;字符串长度够用就行,不要全部 varchar (255)。

✅ 3. 时间字段不要用 varchar 存 创建时间create_time datetime,更新时间update_time datetime。 不要写成字符串存时间,无法排序、不能比较,还走不了索引。

✅ 4. 字段尽量不允许 NULL 能设置NOT NULL就不要 NULL。NULL 会影响索引,查询容易出意料之外的结果。默认值按需设置。

✅ 5. 统一字符集 utf8mb4 支持 emoji 表情,不要用老的 utf8。

CREATE TABLE `user` ( `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(50) NOT NULL COMMENT '用户名', `phone` varchar(11) NOT NULL COMMENT '手机号', `create_time` datetime NOT NULL COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

💡小白口诀:有主键,类型小,时间不用字符串,字段尽量不为空


二、索引怎么建?小白极简版

很多新手两个极端:要么完全不建索引,要么每个字段都建索引。

✅什么时候建索引

经常放在 WHERE、JOIN、ORDER BY、GROUP BY 里的字段,才建索引。 例:经常按手机号查询用户 → phone 建索引。

❌不要建索引

  1. 更新非常频繁的字段(索引维护消耗性能)
  2. 区分度很低字段(比如性别,只有 0/1,建索引没用)
  3. 短、小表(几百行数据,全表扫描比索引更快)

联合索引记住一句话:最左优先

建立索引idx_name_phone(name,phone)查询条件从左往右连续匹配才能命中索引。

可以命中:

  • where name=' 张三'
  • where name=' 张三 ' and phone='13800138000'

无法命中:

  • where phone='13800138000'

💡小白口诀:联合索引,从左开始,遇到范围后面失效

索引失效最常见 3 个坑(小白高频踩)

  1. like%关键词,前面带 % 不走索引;关键词%可以
  2. where 条件里,字段套函数、运算,索引失效
-- 失效 WHERE DATE(create_time)='2026-09-11'
  1. 隐式类型转换:varchar 字符串字段,拿数字去匹配,索引失效

三、CRUD 基础,小白容易写错的地方

查询 SELECT

❌禁止SELECT *只查需要的字段,减少传输,有机会触发覆盖索引。 ✅推荐select id,name,phone from user

删除 DELETE

小白最大坑:忘记 where,直接清空整张表!

-- 危险!不写where,删除全表 DELETE FROM user;

⚠️生产执行 DELETE,先执行 SELECT 核对数据,再删

更新 UPDATE

同样!不加 WHERE 会更新全表

-- 危险!所有行name都被修改 UPDATE user set name='test';

INSERT

批量插入优先一条 sql 插入多行,减少数据库连接开销

INSERT INTO user(name,phone) VALUES ('a','13800000000'), ('b','13900000000');

💡小白口诀:删改必带 where,上线前先用 select 校验


四、事务什么时候用?小白简单理解

事务:一组 SQL,要么全部成功,要么全部回滚。 关键词:BEGIN; COMMIT; ROLLBACK;

适合场景:转账、订单扣库存,多步操作必须同时成功。

BEGIN; UPDATE account SET money = money -100 WHERE id=1; UPDATE account SET money = money +100 WHERE id=2; COMMIT;

中间出错,执行 ROLLBACK 撤销。

⚠️小白注意:

  1. 不要写超大事务,事务越大锁时间越长,容易卡顿
  2. 查询语句不需要包事务,没必要

💡小白口诀:多操作要捆绑,才开事务;查询不用事务。


五、Explain 看懂慢查询(小白不用懂全部)

想看 SQL 有没有走索引,前面加 EXPLAIN

EXPLAIN SELECT name FROM user WHERE phone='13800138000';

小白只看两个字段:

  1. type:看到 ALL,代表全表扫描,需要优化
  2. Extra:看到 Using filesort / Using temporary,代表性能差

只要看到 ALL,就思考:是不是没建索引?索引失效了?


六、分页查询坑:limit 大偏移量

❌不好写法

select * from user limit 100000,10;

数据库会扫描前面 10 万行,丢弃后返回 10 条,越往后越慢。

✅优化写法(主键分页)

select * from user where id>100000 limit 10;

七、count 统计,小白别乱用

  • count (*):统计行数,推荐
  • count (字段):统计该字段不为 NULL 的数据,会过滤空值

不要盲目用 count (*) 做超大表实时统计,大数据量表可以用缓存保存总数。


八、日常开发 10 条保命守则

  1. 线上执行 SQL 前,先在测试库跑一遍
  2. 执行 UPDATE/DELETE 前,先用 SELECT 确认影响行数
  3. 不使用 SELECT *
  4. 尽量避免 like '% xxx'
  5. 字段尽量 NOT NULL,时间不用字符串存储
  6. 索引不是越多越好,只给查询频繁字段建索引
  7. 大表不要随便 ALTER,容易锁表
  8. 尽量少用子查询,能用 JOIN 简单写
  9. 避免一次性查询几十万条,分批分页读取
  10. 生产禁止 MyISAM,全部用 InnoDB

九、快速排查问题思路(小白应急)

线上 SQL 慢怎么办?

  1. 加上 EXPLAIN 看执行计划
  2. type 是不是 ALL 全表扫描?
  3. 是否缺少索引 / 索引失效?
  4. 是否 limit 大偏移量、join 多表?

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询