当初接一个小商城项目,甲方催着上线,才被逼着搞懂mysql数据库是什么,不是那种飘在文档里的概念,是实打实要往里面塞订单、会员信息的东西。一开始分不清它和普通文件的差别,直接拿txt文本存用户手机号,导入导出的时候卡到怀疑人生,随便改一行内容,整个记录顺序全乱,筛选数据根本做不到。

mysql数据库:上手时踩过的存储误区

最开始想省事,把所有信息堆在一张表里,商品图片地址、买家留言、支付时间全部挤在一起,字段堆到三十多个。随便做一次订单查询,服务器CPU直接拉满,页面加载要十几秒,测试那边反馈点不开订单页,排查半天,才知道这样写连基础索引都没法正常生效。

文件存数据,没有约束。

后来拆分表,单独建会员表、订单表、商品表,用id做关联,一条订单只存会员编号,而不是把会员姓名电话重复写在每一条订单里面。改动的时候只需要改会员表一处,别的地方跟着联动读取,这一步做完,查询速度一下子就稳下来,只是那会还经常写错关联条件,查出来一堆重复数据。

mysql数据库:日常能做的操作边界

本地搭环境用的是8.0版本,安装包在MySQL官方社区就能下,社区版免费商用,这点是当时选它最直接的理由。它只适合结构化的数据,一行一行固定字段的内容,订单、账号、分类都合适,要是放长篇文章、短视频这类大块文件,效果很差,一般都是存文件路径,文件本身丢在服务器文件夹或者对象存储里面。

存储形式筛选查询修改同步并发访问
mysql表存储支持条件筛选、排序改一处,别处读取同步支持多人同时读写
txt文本存储只能全文检索多处重复内容要逐一修改多人同时写入容易覆盖

写简单的查询语句的时候,经常忘加where条件,直接执行删除指令,一不留神清空整张测试表,还好提前做了备份脚本,定时导出sql文件,不然测试数据全部重录,要耗大半天时间。正式环境里面,管理员账号一般不给直接的删除权限,就是怕这种手滑的情况。

它不是什么万能程序,不能加速图片加载,不能自动处理业务逻辑,只负责把数据收好,按你写的语句拿出来。业务判断、计算金额这些逻辑,还是要交给后端代码来写,之前搞错分工,想着让mysql去算复杂折扣,语句写的臃肿难维护,后续别人接手根本看不懂。

上线前要调字符集,之前默认设置不对,中文存进去全变成问号,反复改配置文件,重启服务好几次才正常。这类细碎的配置问题,教程里很少重点提,大多都是踩一次坑,才会记牢。

那天把商城订单页面调通,关掉Navicat,浏览器刷新页面,订单列表一秒就出来。盯着屏幕看了一会,没再继续写别的语句。