ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

零基础转行学MySQL第一天:建库、查询、避坑全记录

零基础转行学MySQL第一天:建库、查询、避坑全记录 今天是转行记录的第7天。简单交代一下背景心理学本科毕业后做了3个月HR后来因为个人规划调整决定往数据方向走。作为零基础选手今天第一次正式接触数据库学的就是MySQL——这也是我在小红书和知乎上翻了大量转行帖子之后公认入门门槛最低、岗位需求量又够大的数据库工具。这篇文章不打算写成教科书式的教程就是记录一下一个纯小白在第一天接触MySQL时实际做了什么、踩了什么坑、哪些操作是真正高频实用的。如果你也是刚转行或者准备转行希望这篇能给你一个相对真实的学习参考。1. 转行第一课为什么是MySQL而不是别的数据库先聊一个几乎所有转行新人都会纠结的问题市面上数据库那么多Oracle、SQL Server、PostgreSQL、MongoDB为什么大家一说到入门就推荐MySQL我自己的理解是这样MySQL是开源免费的对新手来说最大的好处就是不用为软件授权费纠结随便找台电脑就能装另一个原因是它在互联网行业的占有率非常高尤其是中小型公司和创业团队岗位JD里出现MySQL的频率远超其他数据库。对于刚转行、还没有明确行业方向的人来说选一个覆盖率高的工具去学性价比是最高的。MySQL和那些商业数据库相比功能上确实有差异但作为入门阶段你只需要掌握标准SQL语法这些知识到了其他数据库上照样能用。换句话说MySQL教的是一套“通用语言”而不是一个孤立软件的操作手册。这也是为什么很多培训机构的数据分析课程、转行训练营第一门数据库课都是MySQL。再补一句从HR转过来的体会做招聘的时候我发现很多岗位写着“熟悉SQL优先”MySQL就是最常见的SQL实现。学会它之后你在简历上能写的东西多了一项而且是一项硬技能不用靠主观描述。从面试角度讲MySQL的考察点也非常明确SQL编写、索引优化、事务隔离级别这些都能通过实际提问快速验证对你对面试官都是高效的。2. 环境搭建的完整实操从下载到看到第一个查询结果2.1 安装包选择到底选哪个版本今天花掉的时间里安装配置占了一部分。先说我踩的第一个坑版本选择。MySQL官网上现在能看到8.0系列和更新一些的版本。很多教程上来就让你装最新版但如果你是刚入门我真的建议装8.0系列就够了原因很简单网上教程最多、遇到的问题几乎都有人踩过、各个云厂商的默认版本也是8.0为主。用太新的版本有时候反而会遇到教程跟不上的尴尬。还有小伙伴会在“安装版”和“免安装版”之间纠结。我个人的建议是新手直接用安装版。免安装版虽然听起来省事但需要自己手动初始化数据目录、配置环境变量、注册Windows服务每一步都可能出问题而且出了问题你都不知道是自己哪一步漏了。安装版有图形界面向导虽然步骤多一点但每一步都有提示对新手友好得多。2.2 安装步骤的详细记录官网下载链接就不放了搜索引擎搜“MySQL Community Server 下载”就能找到注意要选“Community Server”这个社区版别下成商业版。下载之后是一个msi安装包双击运行。安装过程中有几点必须注意。第一个是安装类型新手建议选“Developer Default”它会帮你把开发常用的组件都装好省得后面缺了这个组件那个组件。第二个是到“Accounts and Roles”这一步需要设置root用户的密码——这个密码一定要记住忘了的话后面重置非常麻烦。第三个是在“Windows Service”配置界面勾上“Configure MySQL Server as a Windows Service”这样MySQL会作为后台服务自动启动不用每次手动开。说到密码顺便提醒一下密码里尽量别用太特殊的字符。我之前设置密码时用了带分号的组合结果在命令行里密码被截断登录时报错半天没反应过来是密码的问题。后来改成字母加数字的组合一切正常。这类小问题虽然听起来很蠢但刚接触时真的很容易踩。2.3 用MySQL Workbench完成第一次查询安装完成后系统里会带一个叫“MySQL Workbench”的图形化工具。对新手来说这个工具比纯命令行友好太多了。打开Workbench找到你配置好的本地连接点击就会出现一个SQL编辑窗口。在编辑区输入SELECT 1 1;然后点击执行按钮快捷键是CtrlEnter如果看到结果是2恭喜你的MySQL环境已经通了。这一步看起来简单但它的意义在于证明你的服务在运行、客户端能正常连接、SQL解析器在工作。就好比你买了一台新电脑开机之后第一个动作一定是打开记事本打几个字确认键盘没问题道理是一样的。后续所有的学习都是建立在这个“通了”的基础之上。顺带说一句Workbench的界面分区左侧是SCHEMAS面板能看到当前所有的数据库中间是SQL编辑器下方是结果输出区。这三个区域用熟了后面操作效率会高很多。3. 第一天必须掌握的SQL核心语法从建库到查询3.1 先搞清楚SQL是什么在敲代码之前我觉得有必要先理清一个概念SQLStructured Query Language结构化查询语言是一种用于管理和操作关系型数据库的语言。MySQL是数据库管理系统SQL是你和它对话的语言——你告诉MySQL“帮我查一下用户表里有哪些名字”MySQL通过SQL语法理解并执行。类比一下数据库是一间仓库表格是仓库里的货架SQL就是跟仓管员沟通的指令话术。你不需要懂仓库内部怎么运转但你必须学会准确地下指令。对HR转行的我来说这个类比非常直观——招聘系统里筛选简历就是在查“候选人表”条件是“base在上海且有3年经验”这不就是一个SELECT语句吗这么一想SQL跟我之前的工作也不是完全无关。3.2 数据库的“增删改查”四条语句打天下SQL最核心的就四种操作简称为增删改查INSERT新增数据DELETE删除数据UPDATE修改数据SELECT查询数据这四条里SELECT最为高频。对于转行学MySQL的人来说前期80%的精力都应该放在SELECT语句上。其实做数据分析类的岗位绝大多数时候都是在查数据真正需要去改数据的机会反而不多。而且SELECT的复杂程度天花板很高单表查询、多表联查、嵌套子查询、聚合统计这些够你学好一阵子。3.3 建库建表落地你的第一个数据表有了环境接下来要做的第一件事就是创建一个自己的数据库和数据表。这就像你在Excel里新建了一个工作簿先建好sheet然后才能往里面填数据。在Workbench的SQL编辑框里输入CREATE DATABASE school; USE school; CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, course VARCHAR(100), score DECIMAL(5,2), created_at DATETIME DEFAULT CURRENT_TIMESTAMP );这段代码做的事情分别是创建一个名为school的数据库切换到school库创建一个student表里面有id学号主键、name姓名、course课程、score成绩、created_at创建时间五个字段。字段类型这里简单说一下INT是整数类型VARCHAR是可变长度字符串DECIMAL是精确小数DATETIME是日期时间。初学者最容易犯的错是“什么内容都用VARCHAR存”比如分数本来应该用DECIMAL如果存成VARCHAR后面就无法做大小比较和数学运算——在Excel里你还能用“分列”补救在数据库里存错类型就只能回头改表结构。所以建表之前先想想这个字段要拿来做什么要不要排序要不要计算答案会影响你选什么类型。3.4 写入数据与最核心的SELECT查询建好表之后往里面填几条测试数据INSERT INTO student (name, course, score) VALUES (小明, 数学, 88.50), (小红, 英语, 92.00), (小刚, 数学, 75.00);插入成功之后最激动人心的时刻来了——执行SELECT * FROM student;看到数据表格出现在结果区的时候那种感觉还挺奇妙的。你亲手完成了一个从无到有的过程建了数据库、建了表、塞了数据、查了出来。这一步的价值不亚于程序员的“Hello World”这意味着你已经掌握了关系型数据库最基本的闭环。接下来就可以尝试各种查询条件了。比如查所有数学课成绩大于80分的学生SELECT name, score FROM student WHERE course 数学 AND score 80;WHERE子句是查询的灵魂它就像招聘网站里的筛选器学历是本科、工作年限是3年以上、base是上海——每一个条件就是WHERE后面的一个限定。多条件组合用AND和OR连接这个逻辑熟悉之后你会发现数据库查询的思维方式和工作中的筛选逻辑完全是相通的。3.5 排序让数据按你的心意排列数据查出来了但如果数据量大你还得让它们按一定的顺序排列这样才直观。排序用的是ORDER BY子句。比如刚才查出来的学生记录想按照成绩从高到低排SELECT name, course, score FROM student ORDER BY score DESC;DESC是降序ASC是升序。默认不写的话是ASC升序。在Excel里你也会经常做“排序”操作SQL里的ORDER BY就是干这个的。区别在于Excel排序会把你整个sheet的顺序打乱而ORDER BY只是在查询结果里改变显示顺序原始表数据是不动的。这个区别很重要因为在数据库里表数据的物理存储顺序通常不该被随意改动查询时的排序应该通过ORDER BY来控制。3.6 聚合函数从“看明细”到“看统计”如果说SELECT加WHERE解决的是“查哪些记录”那么聚合函数解决的是“这些记录能算出什么结论”。第一次用GROUP BY跑出统计结果的时候我就意识到这就是Excel里数据透视表的数据库版。比如我想统计数学课和英语课分别有多少人选、平均分是多少SELECT course, COUNT(*) AS num_students, AVG(score) AS avg_score FROM student GROUP BY course;COUNT是计数AVG是平均值SUM是求和MAX和MIN是最大最小值。这些函数配合GROUP BY分组使用能够让你从一堆明细数据里快速提炼出有价值的统计信息。对转行的人来说这个技能在数据分析面试里几乎是必考的日常处理报表也能派上用场。对小刚的数学成绩不满意一条AVG就能看出课程平均分比在Excel里手动拉公式快多了。4. 新手绕不开的那些坑安装报错与连接问题实录4.1 服务启动失败的排查思路安装MySQL后最常见的问题之一是服务启动时报错。我在安装过程中虽然没出大问题但周边不少同学遇到过。最常见的服务启动失败原因有两个一个是3306端口被占用另一个是MySQL服务启动时找不到数据目录。端口被占用的排查方法打开命令行执行netstat -ano | findstr :3306如果有输出结果说明有程序正在占用3306端口。最常见的是之前安装过其他数据库或者某些开发工具自带了MySQL。处理方法一般有两种把占用端口的程序关掉或者修改MySQL的端口配置到3307之类的空闲端口但修改端口后后续连接URL都要跟着改所以建议优先解决冲突。4.2 Cant connect through socket报错的解决这个错误主要出现在Linux环境但Windows下偶尔也能遇到。错误信息类似ERROR 2002 (HY000): Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock。看到这个别慌翻译成人话就是客户端想连接MySQL服务但找不到服务监听的socket文件——翻译成人话就是服务压根没起来。解决逻辑只有一个方向确认mysqld服务是否在运行。Windows下通过“服务”管理工具查看MySQL服务状态Linux下执行systemctl status mysqld如果服务没启动执行启动命令。如果启动了还是报这个错再去看mysql的配置文件确认socket路径是否和客户端默认找的路径一致。绝大多数情况是前者也就是服务没有正常运行。4.3 密码遗忘怎么破前面说了一定要记住root密码但万一忘了也别头大。MySQL提供了一个跳过权限认证的启动模式在命令行用mysqld --skip-grant-tables启动跳过权限校验然后以无密码方式登录root修改成新密码最后重启正常模式。需要注意这种模式不应该持续开着因为所有人都能无密码访问操作完一定要立刻恢复正常模式。不过对新手来说防患于未然最省心。我的建议是把密码放在一个密码管理工具里或者写在本地备忘录的某个位置别用那种自己都记不住的超复杂密码。4.4 中文乱码的经典问题插入的数据包含中文查询出来却是乱码或者???号这也是新手老遇到的事。根本原因在于字符集不对。MySQL 8.0默认的字符集已经是utf8mb4了理论上不太会出现乱码但如果你安装的是早期版本或者建表时没有指定字符集就会踩坑。解决方法是建库的时候显式指定CREATE DATABASE school CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;utf8mb4是UTF-8的超集可以存下emoji这类四字节字符而老的utf8只能存三字节这也是推荐直接用utf8mb4的原因。一句话总结所有涉及到文本存储的地方尽量统一用utf8mb4支持范围最大。5. 转行视角的复盘学MySQL正确的心态与方法5.1 别沉迷于完美配置今天最大的感受就是环境搭建将近花了一半时间有点不值。安装MySQL这件事本质上是一个“一次性工程”配好之后很长时间都不会再去动它。但学习SQL语法才是每天都要用的。如果你花了两小时去折腾配置文件、环境变量、命令行工具却连一条SELECT都没写过那投入产出比就很低了。我现在的建议是如果你的目标是转行数据分析、数据运营、后端开发而不是DBA方向那么请把精力集中在SQL语法本身能用Workbench点出来就不要手动折腾命令行。Workbench能完成95%以上的日常操作。工具是拿来用的不是拿来显摆的。5.2 以“面试真题”倒推学习重点从HR转技术学习有一个优势你知道面试官是怎么筛人的。就MySQL而言初级岗位常考的点其实非常集中——手写SQL尤其是多表连接、索引的基本原理、事务的四种隔离级别、以及常见的SQL优化手段。第一轮学习不需要面面俱到但上面这几块内容在学完基础语法后应该尽早接触。我的规划是第一周掌握建库建表、增删改查、排序过滤、聚合函数能够独立把一个Excel场景改造成数据库查询场景第二周学习多表连接和子查询这两块是面试手写SQL的重灾区第三周开始了解索引和事务这是从“会用”到“懂原理”的转折点。按这个节奏走一个月后至少能应对初级数据岗位的SQL考察。5.3 动手是唯一的捷径看了10个教程不如自己跑通一条SQL。数据库这个东西语法符号错一个就执行失败动手带来的反馈是最直接的。今天从建库到查询跑通一遍之后之前看教程产生的很多疑惑瞬间就通了。很多概念不是不懂而是没亲眼见过。这种“哦原来如此”的顿悟时刻只有亲自敲代码才能获得。我还给自己定了一个小任务把HR工作中常用的筛选场景全部用SQL模拟一遍。比如“查所有学历为本科且工作年限≥3年的候选人按工作年限降序排列”——这是多贴合实际应用的练习三个月HR经历带来的场景感反而成了学SQL的素材库。转行不是从零开始过去积累的行业场景理解其实都是学习新技能的背景板。最后再分享一个今天摸索出来的高效学习方法遇到问题先自己尝试解决卡住20分钟再去看报错搜索解决方案。因为一个报错信息搜出来往往有几十篇帖子但每篇的环境和版本都不同。你自己先想通了问题大概出在哪个环节再去看别人的解决方案会清醒很多。按照这个思路SQL这条路新人完全走得通而且走得很稳。
返回列表