ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MySQL 小白秘籍|看完直接上手,避开 90% 坑(开发入门必备)

MySQL 小白秘籍|看完直接上手,避开 90% 坑(开发入门必备) 很多刚入行的小伙伴一看到 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) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;小白口诀有主键类型小时间不用字符串字段尽量不为空二、索引怎么建小白极简版很多新手两个极端要么完全不建索引要么每个字段都建索引。✅什么时候建索引经常放在 WHERE、JOIN、ORDER BY、GROUP BY 里的字段才建索引。 例经常按手机号查询用户 → phone 建索引。❌不要建索引更新非常频繁的字段索引维护消耗性能区分度很低字段比如性别只有 0/1建索引没用短、小表几百行数据全表扫描比索引更快联合索引记住一句话最左优先建立索引idx_name_phone(name,phone)查询条件从左往右连续匹配才能命中索引。可以命中where name 张三where name 张三 and phone13800138000无法命中where phone13800138000小白口诀联合索引从左开始遇到范围后面失效索引失效最常见 3 个坑小白高频踩like%关键词前面带 % 不走索引关键词%可以where 条件里字段套函数、运算索引失效-- 失效 WHERE DATE(create_time)2026-09-11隐式类型转换varchar 字符串字段拿数字去匹配索引失效三、CRUD 基础小白容易写错的地方查询 SELECT❌禁止SELECT *只查需要的字段减少传输有机会触发覆盖索引。 ✅推荐select id,name,phone from user删除 DELETE小白最大坑忘记 where直接清空整张表-- 危险不写where删除全表 DELETE FROM user;⚠️生产执行 DELETE先执行 SELECT 核对数据再删更新 UPDATE同样不加 WHERE 会更新全表-- 危险所有行name都被修改 UPDATE user set nametest;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 id1; UPDATE account SET money money 100 WHERE id2; COMMIT;中间出错执行 ROLLBACK 撤销。⚠️小白注意不要写超大事务事务越大锁时间越长容易卡顿查询语句不需要包事务没必要小白口诀多操作要捆绑才开事务查询不用事务。五、Explain 看懂慢查询小白不用懂全部想看 SQL 有没有走索引前面加 EXPLAINEXPLAIN SELECT name FROM user WHERE phone13800138000;小白只看两个字段type看到 ALL代表全表扫描需要优化Extra看到 Using filesort / Using temporary代表性能差只要看到 ALL就思考是不是没建索引索引失效了六、分页查询坑limit 大偏移量❌不好写法select * from user limit 100000,10;数据库会扫描前面 10 万行丢弃后返回 10 条越往后越慢。✅优化写法主键分页select * from user where id100000 limit 10;七、count 统计小白别乱用count (*)统计行数推荐count (字段)统计该字段不为 NULL 的数据会过滤空值不要盲目用 count (*) 做超大表实时统计大数据量表可以用缓存保存总数。八、日常开发 10 条保命守则线上执行 SQL 前先在测试库跑一遍执行 UPDATE/DELETE 前先用 SELECT 确认影响行数不使用 SELECT *尽量避免 like % xxx字段尽量 NOT NULL时间不用字符串存储索引不是越多越好只给查询频繁字段建索引大表不要随便 ALTER容易锁表尽量少用子查询能用 JOIN 简单写避免一次性查询几十万条分批分页读取生产禁止 MyISAM全部用 InnoDB九、快速排查问题思路小白应急线上 SQL 慢怎么办加上 EXPLAIN 看执行计划type 是不是 ALL 全表扫描是否缺少索引 / 索引失效是否 limit 大偏移量、join 多表
返回列表