news 2026/10/1 19:04:52

MySQL学习第一天:环境搭建、建库建表与基础查询

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL学习第一天:环境搭建、建库建表与基础查询

说实话,MySQL这几个字在我电脑里躺了快一年。每次想学,都被"数据库"三个字吓回去,总觉得那是科班程序员才碰的东西。直到这周下定决心给自己安排了一个"MySQL学习第一天"的计划,折腾完才明白:真正劝退你的不是MySQL本身,而是网上教程跳过的那些细节。这篇就记录我第一天的完整经过,参考的课程正好讲到第3章第2节——也就是库和表的基本操作。内容包括环境安装、建库建表、基础查询,还有几个让我卡了不少时间的问题:SSL连接报错、默认值设置、字符集配置。如果你也准备从零开始,这篇可以直接当你的第一天路线图。我的环境是Windows + MySQL 8.0,大部分内容在Linux和macOS上同样适用。

1. 第一天学习路线:为什么直接干库表操作而不是先啃原理

1.1 从"会用"开始,第一天只解决三件事

很多新手学MySQL最容易犯的错,就是先去背概念。什么事务隔离级别、B+树索引原理、MVCC……这些东西很重要,但第一天完全用不上。我的原则很简单:先跑起来,再问为什么。

第一天我只给自己定了三个目标:环境装好、命令行能登录、能建库建表并跑通几条基本查询。至于原理,等到后面开始学索引和事务的时候再回头补,那时候有了实践基础,看原理才不会像看天书。

实际操作下来,这三个目标大概花了我一个下午加半个晚上。真正花时间的地方不在SQL本身,而在安装、配置、连接这种环境问题。这也是为什么我把环境部分放在博文的最前面——因为80%的新手都是在这里被劝退的,而不是卡在SQL语法上。

1.2 教程3.2节是什么:先有库表,才有查询

我跟着学的这套入门教程分章节大概是这样:第一章MySQL概述和安装,第二章SQL基础概念,第三章操作数据库和表,第四章查询与增删改……我写的"3.2"指的就是第三章的第二节:数据库的创建、删除,以及表的创建和字段设计。

这个章节位置特别适合"第一天"这个时间点——它前面是安装和概念铺垫,后面才是真正的查询练习。先搞清楚库和表怎么建,后面写SELECT才有地方施展。第一次学的人可能不理解为什么数据定义语言(DDL)比数据操作语言(DML)更值得先学。打个比方:你想练习在纸上写字,总得先有张纸。CREATE DATABASE是给你准备一个练习本,CREATE TABLE是在本子里画好格子,后面的INSERT和SELECT才是往格子里填内容、查内容。没有库表,后面一切操作都是空谈。

第一天我的实操顺序是:装完MySQL之后,先用命令行创建了一个study_db数据库,在里面建了两张表,然后往表里插了几条数据,再跑了几个带排序、条件过滤的查询。整个过程没有碰任何高级特性,但恰恰是这些基础操作让后面的学习变得顺利。后面几天我准备按顺序补索引、视图、事务和存储过程,第一天只需要把基础打牢。

2. 环境搭建:从下载安装到命令行成功登录

2.1 Windows下安装MySQL 8.0:图形化安装与zip手动配置

先说下载。MySQL官网的下载页面确实需要一个账号,但下载动作本身不需要登录,直接点"Download"即可。社区版(MySQL Community Server)是免费的,足够学习用,千万别下成商业版。

方式一:MySQL Installer图形化安装

下载mysql-installer-community-8.0.x.msi,双击安装,选Server only。接着进入配置界面,端口保持默认3306,认证方式建议选第一个"Use Strong Password Encryption"(对应caching_sha2_password),然后设置root密码,后面一路Next就行。这种方式适合不想折腾的读者,图形化引导比较友好,十几分钟能装完。

但Installer方式有几个坑值得一提。第一,安装过程中如果安全软件拦截服务启动,MySQL服务可能起不来,装完连不上先检查服务状态;第二,安装完后的root密码千万记好,忘了就只能走重置流程,后文会提到。

方式二:zip压缩包手动配置

我更推荐的方式。下载mysql-8.0.x-winx64.zip,解压后放到一个纯英文路径下,比如D:\mysql-8.0.xx。然后在目录下新建my.ini,内容为:

[mysqld] basedir=D:/mysql-8.0.xx datadir=D:/mysql-8.0.xx/data port=3306 character-set-server=utf8mb4 [client] default-character-set=utf8mb4

注意basedir和datadir路径里用的是斜杠而不是反斜杠,否则可能解析有问题。写好后,以管理员身份打开cmd,进入bin目录执行:

mysqld --initialize-insecure mysqld --install mysql net start mysql mysql -uroot

这里--initialize-insecure表示初始化数据目录,并且root初始密码为空。如果换成--initialize,则会生成随机临时密码,密码会记录在data目录下的错误日志文件中。两者选哪个都行,新手建议用--initialize-insecure,少一步找密码的操作。

2.2 折腾过程中遇到的两个问题:初始密码和字符集

命令行登录后第一件事是改密码,否则空密码太危险了。登录MySQL后执行:

ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; FLUSH PRIVILEGES;

如果你在Linux发行版上通过包管理器安装(比如CentOS的rpm安装),初始密码往往需要去日志里找。我见过很多人在这一步卡住,登录不进去就以为装坏了。其实只要执行:

grep 'temporary password' /var/log/mysqld.log

看到那串临时密码,复制出来mysql -uroot -p登录就行。日志文件的位置可能因发行版略有差异,但关键词一定是temporary password。

另一个容易忽略的问题是字符集。很多老教程会教你设置character_set_server=utf8,但在MySQL 8.0里utf8这个编码名其实是utf8mb3的别名,存不了emoji,推荐直接用utf8mb4。我在my.ini里已经把服务端和客户端的默认字符集都设成了utf8mb4,这样做的好处是建库建表时不用每次都手动指定字符集,能少踩很多"中文变问号"的坑。

MySQL 8.0默认的字符集其实已经是utf8mb4了,为什么还要手动写?因为客户端(命令行、Navicat等)的字符集是独立的,如果你的客户端连接没设置utf8mb4,插入中文照样乱码。所以[client]那段配置特别关键,很多人漏了这一段就导致了中文乱码,排查半天找不到原因。

3. 3.2节内容拆解:创建数据库和表的核心语法

3.1 数据库层面:CREATE DATABASE、SHOW、USE、DROP

命令行登录后,第一步自然是创建数据库。完整操作如下:

CREATE DATABASE study_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; SHOW DATABASES; USE study_db; DROP DATABASE study_db;

为什么要显式指定字符集和排序规则?我在前面提到过,MySQL 8.0服务端默认字符集已经是utf8mb4,但显式写出来更保险,尤其以后要把库往服务器上迁移时,防止因为两边版本不同导致字符集不一致。排序规则里的utf8mb4_general_ci是大小写不敏感的比较规则,_ci就是case-insensitive,日常开发基本都用这个。

另外想提醒一个新手的操作习惯:USE study_db;之后,你所在的数据库就切换了,但MySQL命令行不会像某些工具那样显示当前库。建议执行后先跑SELECT DATABASE();确认自己没选错库,否则后面所有建表都会落到默认库里,到时候找不到表就是一脸懵。

3.2 CREATE TABLE完整示例与字段设计

有了库,下一步是建表。我用一个常见的用户表作例子:

CREATE TABLE user ( id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', username VARCHAR(50) NOT NULL COMMENT '用户名', email VARCHAR(100) DEFAULT NULL COMMENT '邮箱', age TINYINT UNSIGNED DEFAULT 0 COMMENT '年龄', balance DECIMAL(10,2) DEFAULT 0.00 COMMENT '余额', status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1正常 0禁用', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (id), UNIQUE KEY uk_username (username) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

这行建表语句里包含了第一天的核心知识点,逐个拆开讲。

INT UNSIGNED表示无符号整数,配合AUTO_INCREMENT做主键,这是最常见的写法。VARCHAR(50)表示最多50个字符,注意是字符数不是字节数,一个汉字也算一个字符。DECIMAL(10,2)表示总共10位、小数点后2位,适合存金额。DATETIME存日期时间,默认值用CURRENT_TIMESTAMP可以在插入时自动填充当前时间。

COMMENT是字段注释,这里强烈建议大家写。几个月后回头看表结构,注释能救命。没有注释的表,字段一多,连自己都分不清哪是哪。

还有个细节:status TINYINT NOT NULL DEFAULT 1这种写法在业务表里非常常见。状态字段用数字1和0表示,比用字符串"enable"/"disable"节省空间,查询也更快。这就是热搜里"mysql设置默认值为0"的常见场景,我们后面专门讲。

3.3 数据类型怎么选:第一天最该记住的五个类型

新手最头疼的就是类型选择。其实第一天记住下面这五类基本就够用了。

类型常见用途注意点
INT / BIGINT主键、数量、状态码INT最大约21亿,超过用BIGINT
VARCHAR(n)用户名、标题、短文本n是字符数不是字节数
DECIMAL(m,d)金额、精确小数不要用FLOAT/DOUBLE存金额
DATETIME / TIMESTAMP时间记录DATETIME更直观,TIMESTAMP有2038年问题
TEXT / LONGTEXT长文章、大文本不能设置默认值,查询性能较差

关于"mysql中int+5"这个热搜词,我特意查了一下,很多人在问INT(11)是不是表示最多存11位数字。这个说法是历史遗留:老版本中INT(M)的M只是影响显示宽度,比如INT(5)配合ZEROFILL会在前面补零,但不影响实际存储范围。MySQL 8.0已经不建议使用这个显示宽度了,你直接写INT就行,不要被网上旧资料误导。

3.4 表和字段的修改:第一天就要会ALTER

建完表后,99%的情况会想改结构。最容易漏的就是某些字段。这时常用ALTER TABLE:

ALTER TABLE user ADD COLUMN phone VARCHAR(20) DEFAULT NULL COMMENT '手机号'; ALTER TABLE user MODIFY COLUMN age TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄'; ALTER TABLE user DROP COLUMN email;

注意,ALTER TABLE在表数据量大的时候会锁表,生产环境要谨慎。第一天在自己机器上随便改没问题,但心里要绷一根弦:线上改表不是小事,后面学到锁表的时候会专门回顾这个点。

这里插一句,热搜里还有"mysql表结构自动转tdengine超级表+子表"这种关键词。TDengine是时序数据库,和MySQL不是一回事,第一天完全不用关心。但你要明白一个方向:MySQL的表结构是二维关系模型,转到其他数据库往往需要工具辅助。这是后话,先把MySQL本身的结构搞明白。

4. 查询与常用函数实操:第一天能上手的高频操作

4.1 基础查询:SELECT、WHERE、ORDER BY、LIMIT

建好表后,我插了一些测试数据,然后开始试查询。比如:

SELECT id, username, status FROM user WHERE status = 1 ORDER BY id DESC LIMIT 10;

这句的意思是从user表里查状态为1的用户,按id倒序排列,只要前10条。还有:

SELECT * FROM user WHERE username LIKE '张%';

注意%是通配符,'张%'表示以"张"开头。条件多的时候:

SELECT * FROM user WHERE age BETWEEN 20 AND 30 AND status = 1;

这里值得说一个新手常踩的坑:SQL的书写顺序和实际执行顺序不一样。拿刚才那句举例,书写顺序是SELECT、FROM、WHERE、ORDER BY、LIMIT,但执行顺序其实是FROM、WHERE、SELECT、ORDER BY、LIMIT。这解释了为什么WHERE后面不能用SELECT里定义的别名,因为WHERE执行时SELECT还没算出来。这个点第一天如果消化不了就先记住结论,后面学到子查询会豁然开朗。

4.2 常用函数:日期、字符串与聚合

热搜里有"mysql常用函数"和"mysql将字符串转为日期",这是新手很快会碰到的需求。列举几个第一天就能用得上的。

SELECT NOW(), CURDATE(); SELECT STR_TO_DATE('2025-04-15', '%Y-%m-%d'); SELECT DATE_FORMAT(create_time, '%Y年%m月%d日') FROM user; SELECT COUNT(*), AVG(age), MAX(balance) FROM user; SELECT IF(age >= 18, '成年', '未成年') FROM user;

STR_TO_DATE就是把字符串转成日期的函数,后面的格式串%Y-%m-%d必须和字符串格式对得上,不然返回NULL。DATE_FORMAT反过来,把日期按指定格式输出。聚合函数COUNT、AVG、MAX是统计场景的重头戏,第二天学分组查询时会经常用到。

这些函数不需要硬记,但要学会怎么看。最实用的方法是在SQL客户端里输入函数名按F1查帮助,或者直接去官网文档搜函数列表。第一天只要知道MySQL提供了这些工具、有需求时会去查就行,不用逼自己背下来。

5. 第一天避坑清单:默认值、字符集、SSL连接问题

5.1 字段默认值到底什么时候写

热搜词里"mysql设置默认值为0"出现频率很高,我在实操中也遇到了默认值的困惑。看这个案例:

CREATE TABLE t_order ( id INT PRIMARY KEY, status TINYINT NOT NULL DEFAULT 0 );

当插入数据时没有指定status,MySQL会自动填入0。但如果字段定义改成status TINYINT(不加NOT NULL),插入时没给值就会是NULL,NULL不等于0,在WHERE status = 0这种条件里查不到,这是非常隐蔽的坑。

所以经验是:语义上不允许为空的字段,一定要同时写NOT NULL和DEFAULT。DEFAULT 0通常用在状态、计数这类字段上,而DEFAULT NULL则用在可选信息上。还有一类字段要特别小心,比如create_time这种时间字段,写DEFAULT CURRENT_TIMESTAMP后,插入时可以完全不管它,MySQL自动填当前时间。

5.2 连接工具的选择与SSL错误完整排查

关于连接工具,我自己试了Navicat、DBeaver和MySQL Workbench。如果你用的是Windows,Navicat确实最顺手,但有些高级功能需要付费;DBeaver免费开源,功能也不差,尤其适合不想折腾的人;MySQL Workbench是官方出品,运维类的工具(导出、性能分析)很强,但界面风格偏工程化。

再说我前面埋下的SSL连接错误。这个问题的完整排查过程如下。

第一步,先在命令行确认MySQL服务真的在运行:

net start | findstr mysql

或在Linux上:

systemctl status mysqld

如果服务没起来,先解决服务问题,不然后面全白搭。

第二步,确认端口通不通:

telnet 127.0.0.1 3306

端口不通就去查my.ini里的bind-address和端口配置。

第三步,确认账号能否用命令行登录:

mysql -uroot -p

如果命令行能登录,说明MySQL本身没问题,问题就出在客户端连接参数上。

第四步,回到客户端。Navicat连接配置里,在"SSL"标签页把使用SSL那一项改成"禁用"。很多教程从没提过这个选项,导致MySQL 8.0默认开启SSL后客户端报"SSL connection error",很多人卡在这就放弃了。

第五步,如果禁用SSL还报认证插件错误,就要在MySQL里改认证方式:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';

这个改动只影响root用户本机登录的安全策略,对学习环境完全够用。但如果你要上生产环境,建议保留caching_sha2_password,因为它的密码传输安全性更好,MySQL 8.0默认使用它,只是部分老客户端兼容性差。说白了,学习环境怎么方便怎么来,生产环境别乱动默认行为。

5.3 关于事务和锁:第一天需要知道的两个概念

最后聊一下热搜里高频出现的"mysql事务处理"和"mysql锁表"。第一天我并没有真正写事务代码,但建表时发现了一个绕不开的现实:InnoDB引擎支持事务,而MyISAM不支持。现在的MySQL 8.0默认引擎就是InnoDB,建表语句里我特意写了ENGINE=InnoDB,建议大家不要省。

事务的核心理解一句话:多条SQL要么全部成功,要么全部失败。最典型的就是转账:扣钱和加钱必须是一个整体,不能扣了钱但没加过去。

锁的理解也可以浓缩成一句话:当两个人同时在改同一行数据,后动手的人要等前面的人改完。第一天知道这两个概念就行,具体怎么用、怎么避免锁等待,是后面学习的内容。

我在建表时还发现一个细节:如果表里没有明确的索引,即使只有几万条数据,查询也可能会变慢。所以第二天我准备重点学索引,这是一个顺理成章接下去的方向。

第一天折腾下来,最大的体会是:学MySQL最大的障碍从来不是SQL语法本身,而是环境和服务那一层。只要把安装、登录、建库建表这三步跑通,后面就是一层一层往上叠。

另外分享一个小习惯:我从第一天开始,就把当天练过的SQL语句全部存成带日期的.sql文件,比如day01.sql。别小看这个动作,第二天回顾时直接打开文件就能复盘,比翻聊天记录高效太多。

第二天我计划学索引的创建和优化,还有连接查询。如果你也和我一样从零开始,建议先别急着买厚厚的教材,按我这条路线把第一天跑通,你会觉得MySQL没那么可怕。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 19:03:34

Vulkan高性能渲染实战:初始化、同步与性能优化避坑指南

写 Vulkan 相关的内容,绕不开一句话:它把自由度还给了开发者,也把所有责任还给了开发者。我第一次从 OpenGL 迁移到 Vulkan 时,最大的感受不是“高性能渲染”四个字带来的兴奋,而是被一堆结构体、队列族和同步原语按在…

作者头像 李华
网站建设 2026/10/1 19:03:24

企业智能体平台落地实战:工作流、RAG与权限治理的工程链路拆解

1. 企业智能体平台落地难的根因不在模型,而在工程链路过去一年我参与过三个企业级智能体平台的选型与落地,从最初信心满满到中途反复推翻方案,最后沉淀下来的结论很直接:模型能力早就不是瓶颈了,真正卡住项目的是工作流…

作者头像 李华
网站建设 2026/10/1 19:03:19

AI备课、批改与试讲:WorkBuddy+QuickForm校园落地实操

第一次把WorkBuddy用在一节完整的初中物理课上——从读课标到写教案,从批改作业到无生试讲陪练——坐在电脑前我愣了一下:过去至少要熬两三个晚上的活儿,被拆成了一条有清晰步骤的流水线。这不是说AI可以替教师动脑子,而是说那些重…

作者头像 李华
网站建设 2026/10/1 19:03:10

周报(9.27-9.30)

目录 一、本周计划 二、完成情况 2.1 环境搭建(AutoDL 云端 4090) 2.2 数据准备(OpenFWI 公开数据集) 2.3 训练(完整跑通) 2.4 测试与出图 三、存在问题 四、下一步计划 一、本周计划 把 ABA-FWI …

作者头像 李华
网站建设 2026/10/1 19:02:45

WorkBuddy AI工作台:教师备课批改教研的实战指南

备课三小时,批改两小时,试讲前对着空教室自言自语练到嘴瓢——这是我过去每个工作日的真实写照。直到我把 WorkBuddy 这套 AI 工作台系统地用进教育场景,才真正体会到什么叫“一个人活成一个教研组”。这篇文章我想把 AI 备课、教研数据分析、…

作者头像 李华
网站建设 2026/10/1 19:02:24

WeKnora实战:从本地部署到企业知识库RAG问答系统

最近知识库这话题是真的火。我周围不少朋友都在折腾企业私有知识库,一问就是用大模型直接答,结果要么一本正经胡说八道,要么明明有资料却答不上来,说白了就差在“检索”这一步。大模型没吃过你家文档,问啥都是猜。所以…

作者头像 李华