ARTICLE DETAIL

资讯详情

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

零基础学MySQL:从安装配置到建表查询入门指南

零基础学MySQL:从安装配置到建表查询入门指南 1. 零基础学MySQL先搞清楚这几个核心概念1.1 数据库到底在解决什么问题很多零基础的朋友一上来就急着装MySQL、敲命令结果装到一半发现完全不知道自己在干什么。我的建议是先花十分钟把几个底层概念捋清楚后面所有操作都会变得顺理成章。想象一下你开了一家小卖部最开始用纸笔记账客人少的时候没啥问题。后来客人多了纸本容易丢、容易写错、查起来麻烦于是你换成了Excel表格。再后来货品上千种、每天交易几百笔Excel文件越来越大打开卡顿多人同时修改还会互相覆盖。这时候你需要的是一套专门用来存数据、查数据、管数据的系统——这就是数据库。数据库本质上就是一个按特定规则组织数据、并提供高效存取能力的软件。它帮你解决三件事第一数据持久化保存程序关了、电脑重启了数据还在第二数据结构化组织方便你随时根据需要查询第三多用户并发访问控制避免多人同时操作导致的数据错乱。1.2 MySQL在数据库家族中的位置数据库软件有很多种常见的有Oracle、SQL Server、PostgreSQL、SQLite还有近年很火的分布式数据库。MySQL属于关系型数据库管理系统是目前互联网行业使用最广泛的开源数据库之一。关系型这个词听起来抽象用俗话说就是数据以二维表的形式存储表与表之间可以建立关联。比如一张用户表存用户基本信息一张订单表存购买记录订单表里通过用户ID关联到用户表。这种设计既能避免数据重复存储又能在查询时把多张表的数据组合起来灵活性非常高。MySQL之所以被广泛使用主要有几个原因开源免费、性能稳定、资料丰富、生态成熟。无论是个人学习、中小型项目还是大型互联网应用都能找到合适的应用姿势。对于零基础入门来说选MySQL当做第一门数据库技术性价比非常高。1.3 学会MySQL能做什么从热搜词里能看到大家关心的问题覆盖了安装、连接、增删改查、存储过程、性能调优、主从复制等等这些确实是MySQL使用中最常遇到的几个层面。零基础阶段的你先不用想那么远。学完MySQL基础之后最直接的收获是你能操作数据库完成数据的增删改查能设计一个简单的数据表结构能配合Java、Python、PHP等编程语言完成带数据存储功能的小项目。更进一步理解了索引、事务、锁这些概念之后你就可以分析一条SQL为什么慢、怎么优化这也是后端开发和数据分析岗位的核心技能之一。这一篇我们把地基打牢重点解决安装、连接、基本命令这些进门问题。2. 安装前必须知道的版本选择与下载细节2.1 版本那么多到底该下哪个很多新手打开MySQL官网就蒙了满屏的版本号、专业术语。这里给你一个明确的取舍标准。目前主流版本是MySQL 8.0系列这也是绝大多数企业的生产环境正在使用的版本。8.0相比老版本5.7在性能、安全性、窗口函数、JSON支持等方面都有大幅提升。如果你是零基础自学或者做课程设计、毕业设计、个人项目直接选8.0不用犹豫。5.7版本现在基本处于维护末期除非你的项目环境有特殊要求否则不建议新项目使用。至于更新的MySQL 8.4、9.x这些创新版本功能虽然新但生态兼容性还需要时间沉淀生产环境用得不多零基础学习阶段更没必要追新。怎么判断自己该下载哪个很简单看操作系统和位数。Windows用户选Windows (x86, 64-bit)macOS用户选macOS对应的版本Linux用户根据发行版选择对应的包管理器方式。2.2 下载时最容易踩的坑官网下载页面给了一堆安装包选项第一次看确实容易晕。我用Windows举例说清楚MySQL Installer for Windows这是一个图形化安装向导双击之后就一步步点下一步完成安装适合绝大多数新手。它还会顺便帮你装好MySQL Shell、MySQL Workbench这些配套工具。Windows (x86, 64-bit), ZIP Archive这是解压即用的压缩包版本适合喜欢手动配置、不想被安装向导打扰的进阶用户。配置过程更灵活但需要自己初始化数据目录、设置环境变量对新手来说门槛高一些。MySQL Workbench这是官方的图形化管理工具用来可视化操作数据库后面我们写SQL语句时可以用它在图形界面里执行也可以用它管理数据表结构。下载时还要注意官网页面一般会提供Windows (x86, 32-bit)和Windows (x86, 64-bit)两个选项现在绝大多数电脑都是64位系统选64位就对了。2.3 安装方式的对比安装包、压缩包、Docker除了安装包和压缩包还有一个越来越流行的方式用Docker装MySQL。从热搜词里能看到docker安装mysqlkubesphere部署mysql这些词出现频率很高说明不少人在云原生环境下部署MySQL。三种方式怎么选我给你交个底安装包方式最简单全程图形化界面适合Windows用户和零基础学习者20分钟内能搞定。压缩包方式适合Linux服务器上手动部署或者喜欢掌控每个配置文件细节的开发者。Docker方式一条docker run命令就能拉起一个MySQL实例环境隔离、删除干净、便于多版本切换。适合已经掌握Docker基础、希望在本地快速起测试环境的场景。零基础第一篇文章我强烈建议你用最简单的方式把环境跑起来。安装包能让你把注意力集中在学MySQL而不是折腾环境上。等你对MySQL有一定熟练度了再去折腾Docker部署、主从复制这些进阶操作。3. Windows下MySQL 8.0完整安装与配置实录3.1 安装包方式安装MySQL Server在Windows上装MySQL 8.0最省心的路径是用官方Installer。安装过程有几个步骤需要特别注意我拆开讲。下载好mysql-installer-community-8.0.x.msi之后双击运行首次启动会有一个Choosing a Setup Type界面新手直接选Developer Default就好这里包含了MySQL Server、MySQL Workbench、MySQL Shell等一套常用工具。如果电脑配置一般或者你只想装Server本体可以选Server only后续需要工具再单独装。进入Installation界面后Installer会列出需要安装的组件列表点击Execute开始下载安装。这一步可能会比较慢因为需要从官方源拉取组件包耐心等就行。组件装完后接下来会进入MySQL Server Configuration向导这是整个安装过程中最关键的部分直接决定你后续能不能顺利连上数据库。下面单独用一节说明配置阶段的每个选项。3.2 初始化配置与密码设置MySQL Server配置向导第一步是确定Server配置类型。Config Type有三个选项Development Machine开发机、Server Machine服务器、Dedicated Machine专用数据库服务器。新手选Development Machine即可它按照一般开发机的内存配置自动分配MySQL资源参数后续也可以手动改。接着是Connectivity部分默认端口3306一般不用改。这里有一个很多人忽略的选项Accounts and Roles要求你为MySQL root用户设置密码。MySQL 8.0还支持添加其他用户但零基础阶段一个root用户就够用了账号密码一定要记好。再往下面是Windows Service配置建议勾选Configure MySQL Server as a Windows Service这样MySQL会作为后台服务自动启动省得每次手动开启。勾选Start at System Startup则让MySQL随系统开机自启。有一个细节必须提醒8.0默认的认证插件是caching_sha2_password而不是老版本的mysql_native_password。如果你只用自己的MySQL Workbench连接完全没问题。但如果你以后用某些老版本驱动连数据库比如较旧的Java JDBC驱动或PHP扩展可能会报认证插件不支持的错误。真碰到这种情况时可以登录MySQL后执行ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 你的密码;把认证方式换成兼容模式或者更推荐的做法是升级驱动版本。安装阶段先不用管这个知道有这回事就行。3.3 验证安装与启动服务配置完成后点击FinishMySQL会完成最后的应用配置此时服务理论上已经自动启动了。判断是否安装成功最直接的方式是打开系统的服务管理窗口快捷键Win R输入services.msc回车在服务列表里找到MySQL80看它的状态是否为正在运行。如果你的服务没有自动启动可以右键选择启动。如果启动时报错八成是前面配置阶段出了问题或者端口被占用、数据目录权限异常这些情况我们放到第5节统一排查。怎么确认服务启动后能正常连接最可靠的办法是打开MySQL自带命令行客户端。你可以在开始菜单找到MySQL 8.0 Command Line Client输入root密码后如果出现mysql提示符说明安装配置全部成功。这时候输入SELECT VERSION();再回车能看到当前版本号恭喜你环境已经跑通了。如果你在命令行输入中文乱码或者按回车没反应通常是Windows命令行编码和客户端字符集的兼容问题不影响MySQL本身我们可以放在下一篇讲字符集时详细说。4. Linux服务器安装MySQL的详细步骤4.1 通过包管理器安装MySQL很多人的项目部署在Linux服务器上所以Linux装MySQL是高频需求。不同发行版安装方式略有差别但整体思路一致先用系统自带的包管理器安装软件再初始化配置。以CentOS/RHEL系列为例系统自带的软件源里MySQL版本往往很老或者根本不在默认源里所以官方推荐先添加MySQL官方Yum仓库。执行以下命令添加仓库并安装# 下载并安装MySQL官方仓库包 wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm sudo rpm -Uvh mysql80-community-release-el7-7.noarch.rpm # 安装MySQL Server sudo yum install -y mysql-community-serverUbuntu/Debian系列则用apt方式# 更新软件源索引 sudo apt update # 安装MySQL Server sudo apt install -y mysql-server需要注意的是Ubuntu默认源里的mysql-server就是8.0系列直接装就行。装完后可以用mysql --version确认版本应该能看到类似mysql Ver 8.0.x for Linux on x86_64的输出。4.2 初始化数据库与目录权限Linux下安装完成MySQL后并不会像Windows那样自动完成初始化配置有些步骤需要手动处理。CentOS上用mysqld --initialize初始化数据目录这一步会生成root用户的临时密码# 启动前先初始化系统库和数据目录 sudo mysqld --initialize --usermysql # 如果初始化报错先确认mysql用户存在 # 可以用 id mysql 检查不存在则 sudo useradd -r -s /sbin/nologin mysql初始化完成后启动MySQL服务sudo systemctl start mysqld sudo systemctl enable mysqldenable的意思是设置开机自启这样服务器重启后MySQL会自动起来非常省心。Ubuntu上用apt装的MySQL一般装完就自动初始化并启动了可以直接systemctl status mysql查看状态。查看初始密码的办法CentOS上是从日志文件里找sudo grep temporary password /var/log/mysqld.log日志里会有一行A temporary password is generated for rootlocalhost: xxxxxxxx后面的随机字符串就是临时密码。第一次登录后系统会强制要求你修改密码。这里有个很多新手会栽跟头的点MySQL 8.0默认开启了密码校验策略新密码必须包含大小写字母、数字和特殊字符长度至少8位。如果你设置的密码太简单会报错提示Your password does not satisfy the current policy requirements。临时使用可以降低校验策略-- 登录后先降低密码强度要求再修改密码 ALTER USER rootlocalhost IDENTIFIED BY 新密码; SET GLOBAL validate_password.policy LOW;这个设置重启后不是永久生效的生产环境不建议长期关闭强度校验学习阶段为了方便可以暂时降低。4.3 远程访问配置与注意事项Linux服务器MySQL装完以后默认只允许本机连接。如果你想从自己的电脑上用Navicat、MySQL Workbench等工具远程连过去还需要做两件事一是修改MySQL的root用户允许远程登录二是确保服务器防火墙放行3306端口。先登录MySQL创建一个允许远程访问的用户或者直接让root允许任意主机连接-- 推荐单独创建远程用户不要直接把root暴露给远程访问 CREATE USER remote_user% IDENTIFIED BY 强密码; GRANT ALL PRIVILEGES ON *.* TO remote_user% WITH GRANT OPTION; FLUSH PRIVILEGES;然后再看防火墙。CentOS上用firewalld的话sudo firewall-cmd --zonepublic --add-port3306/tcp --permanent sudo firewall-cmd --reloadUbuntu的ufw写法是sudo ufw allow 3306/tcp配置完之后用本机IP加3306端口去连能通就说明远程访问已经正常。这里必须多说一句安全提醒把MySQL的3306端口直接暴露在公网上有很大风险很容易被扫描爆破。如果只是临时调试用完就关掉防火墙端口如果长期使用建议限定来源IP比如在防火墙规则里只允许你办公室或家宽出口IP访问。实际生产环境更推荐通过堡垒机或内网穿透方案连接避免直接暴露数据库端口。5. 第一次连接数据库初始密码和连接报错全排查5.1 新版MySQL的初始密码机制mysql的初始密码是什么这个问题的搜索热度一直很高。原因在于不同安装方式、不同版本初始密码的地方完全不同很多人装完就卡在登录这步。我把几种常见场景给你列清楚安装方式初始密码在哪里找Windows安装包方式安装过程中自己设置没有初始密码解压版zip方式数据目录下的*.err日志文件中有临时密码CentOS用yum安装/var/log/mysqld.log日志中用grep temporary password查找Ubuntu用apt安装安装时自动初始化通常可以用sudo mysql免密进入后自行修改最后一行的sudo mysql是很多人不知道的技巧用系统root账号加上sudo权限直接登录MySQL本机实例不需要密码。登录后手动改掉密码即可ALTER USER rootlocalhost IDENTIFIED WITH caching_sha2_password BY 新密码; FLUSH PRIVILEGES;5.2 最经典报错error 2002 (HY000) cant connect through socket热搜词里有一条非常具体的报错信息error 2002 (HY000): cant connect to local MySQL server through socket /tmp/mysql.sock。这基本上每个MySQL新手都会碰到我拆开讲讲它到底在说什么。这句话的意思是MySQL客户端尝试通过Unix socket文件连接本机的MySQL服务但找不到这个socket文件。用生活化的比喻就是你按门铃发现门铃不响房子里可能没人、可能门铃坏了、可能地址搞错了。排查链路一般是这样的第一步确认MySQL服务是否在运行。在Linux上执行systemctl status mysqld或者service mysql status看服务是否正常启动。如果服务没起来报这个错太正常了先启动服务再说。第二步如果服务在跑但还是报错检查socket文件的实际路径。socket文件本质上是Linux进程间通信的一个通道文件MySQL默认把它放在/tmp/mysql.sock但有些发行版或自定义配置会把它放在/var/run/mysqld/mysqld.sock。你可以在MySQL配置文件里查看# 查看当前MySQL配置中的socket路径 cat /etc/my.cnf | grep socket # 或者查看运行时的参数 mysqladmin variables | grep socket第三如果socket路径确实不在/tmp/mysql.sock而你用默认方式连接自然就怎么都连不上。解决办法有两种指定socket路径连接或者通过TCP协议连接。# 方式一指定socket文件路径 mysql -uroot -p -S /var/run/mysqld/mysqld.sock # 方式二用TCP协议连接本机 mysql -uroot -p -h 127.0.0.1 -P 3306看到区别了吗直接用mysql -uroot -p默认走socket方式而加上-h 127.0.0.1之后客户端会改用TCP协议通过3306端口连本机。这也是理解MySQL连接机制的一个关键点socket连接只适用于本机TCP连接可以跨主机。5.3 其他高频连接问题汇总除了socket问题还有几个连接相关的常见Bug值得零基础朋友提前避坑。密码错误报错ERROR 1045 (28000): Access denied for user rootlocalhost基本就是密码不对。解决方案如果实在想不起来密码可以通过跳过授权表的方式重置root密码。在配置文件中临时加一行skip-grant-tables重启MySQL后用无密码模式登录改完密码后立刻把这个配置删掉再重启这一步务必做完整否则数据库会处于没有密码保护的危险状态。端口占用启动时报Port 3306 is already in use说明已经有程序占用了3306端口。用netstat -tlnp | grep 3306看看是谁占用的把占用进程处理掉或者改MySQL端口。认证插件不支持前面提过的caching_sha2_password问题常见于Navicat旧版本或者老驱动连接时报错升级客户端或者按第3节的方法切换认证插件即可。连接数满报错Too many connections说明当前连接数达到了max_connections上限。学习阶段可以把上限调大一点在MySQL里执行SET GLOBAL max_connections 500;应急正经修复还得靠排查应用侧是否连接泄漏。6. 数据库和表的基本操作从0建好第一张表6.1 登录、查看、创建数据库环境通了以后我们正式进入MySQL操作。先登录然后看一下当前有哪些数据库-- 登录MySQL本机socket方式 mysql -uroot -p -- 输入密码后进入mysql提示符 -- 查看当前所有数据库 SHOW DATABASES;系统自带几个数据库information_schema、mysql、performance_schema、sys这些是MySQL内部使用的系统库平时不要碰。我们自己的数据需要新建一个独立的数据库。创建数据库的语法是CREATE DATABASE shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;这里有个极其重要的细节字符集一定要指定utf8mb4。很多老教程还在用utf8但MySQL里的utf8其实是阉割版存不了emoji表情这类四字节字符。utf8mb4才是真正的完整UTF-8编码。utf8mb4_unicode_ci是它的排序规则ci表示大小写不敏感日常使用足够。创建好之后用USE shop;切换到该数据库然后用SELECT DATABASE();确认当前所在的库。6.2 数据类型选择与建表语句数据库本质上就是一张张表建表是后面所有操作的基础。我以电商场景的用户表为例带你理解核心数据类型。CREATE TABLE user ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键ID, username VARCHAR(50) NOT NULL COMMENT 用户名, phone CHAR(11) DEFAULT NULL COMMENT 手机号, email VARCHAR(100) DEFAULT NULL COMMENT 邮箱, age TINYINT UNSIGNED DEFAULT 0 COMMENT 年龄, balance DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT 账户余额, status TINYINT NOT NULL DEFAULT 1 COMMENT 状态1正常 0禁用, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, PRIMARY KEY (id), UNIQUE KEY uk_username (username) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户表;逐个解释关键点BIGINT UNSIGNED主键用大整数UNSIGNED表示非负配合AUTO_INCREMENT实现自增ID。VARCHAR(50)vsCHAR(11)变长字符串和定长字符串。用户名长度不固定用VARCHAR手机号固定11位用CHAR更省空间。CHAR在存储时会去掉末尾空格所以存类似金额、编号这种固定长度字段很合适但存手机号也完全可以用VARCHAR。DECIMAL(10,2)金额字段整数部分8位小数部分2位。这里必须用DECIMAL而不是FLOAT或DOUBLE因为浮点数在计算机内部是二进制存储会产生精度误差比如0.10.2可能不等于0.3。而DECIMAL是字符串形式的定点数做金额计算时不会丢精度。created_at和updated_at两个时间字段。DEFAULT CURRENT_TIMESTAMP让创建时间在插入时自动生成ON UPDATE CURRENT_TIMESTAMP让更新时间在记录被修改时自动更新非常实用。ENGINEInnoDB指定存储引擎为InnoDB这是MySQL默认引擎支持事务、行级锁、崩溃恢复绝大多数场景都用它。COMMENT给字段加注释强烈建议每个字段都写上时间久了以后你会感谢当初认真写注释的自己。6.3 插入、查询、更新、删除入门表建好之后最核心的增删改查来了。这是SQL中最高频的操作也是后面所有复杂查询的基础。先插入数据INSERT INTO user (username, phone, email, age, balance) VALUES (zhangsan, 13800138000, zhangsanexample.com, 25, 100.00); -- 一次插入多条 INSERT INTO user (username, phone, email, age, balance) VALUES (lisi, 13800138001, lisiexample.com, 30, 200.50), (wangwu, 13800138002, wangwuexample.com, 28, 50.25);插完之后查询-- 查询全部字段所有记录 SELECT * FROM user; -- 查询指定字段 SELECT username, age, balance FROM user; -- 带条件查询 SELECT username, balance FROM user WHERE age 26; -- 排序查询 SELECT username, balance FROM user ORDER BY balance DESC; -- 分页查询用户列表必备 SELECT username, phone, balance FROM user ORDER BY id LIMIT 10 OFFSET 0;这五条查询语句基本覆盖了80%的日常需求。重点说说ORDER BY和LIMIT。排序字段如果不指定DESC就是默认的升序ASC分页时LIMIT指定返回多少条OFFSET指定从第几条开始。第一页是LIMIT 10 OFFSET 0第二页是LIMIT 10 OFFSET 10依次类推。更新数据-- 修改指定用户的余额 UPDATE user SET balance 150.00 WHERE id 1; -- 更新时带上更新时间字段如果表里没设置ON UPDATE的话手动改 UPDATE user SET balance balance 50, updated_at NOW() WHERE username zhangsan;更新语句最大的坑是忘记写WHERE条件。只要不写WHEREMySQL会把整张表所有记录的该字段都改掉而且没有撤销键。千万不要在没加WHERE的情况下直接敲回车。删除数据-- 删除指定记录 DELETE FROM user WHERE id 3; -- 清空整张表保留表结构 TRUNCATE TABLE user;DELETE是逐行删除可以带WHERE条件挑着删TRUNCATE是把整张表清空表结构保留但自增ID会重置。两种操作都不可逆执行前多确认几遍。到这一步你已经能独立完成建库→建表→插入→查询→更新→删除的完整闭环了。这个闭环看似简单却是所有数据库应用的核心骨架后面的多表关联、子查询、事务、索引优化全部建立在这几个基本操作之上。7. 零基础第一篇的收尾学习路径与避坑建议第一篇内容到这里MySQL环境已经搭好经典报错也知道怎么排查了还能自己建表、执行基本的增删改查。这个进度对零基础来说不算慢但离真正会用MySQL做项目还有一段路我把自己带新人的经验整理成几条建议。第一个建议勤用官方文档和SHOW语句。很多人遇到问题第一反应是搜博客但实际上MySQL自带的帮助系统就能解决大量疑问。在mysql提示符里输入HELP SHOW;、HELP CREATE TABLE;会给你完整的语法说明。官方文档虽然英文为主但配合翻译工具读起来并不难比网上信息过时的二手教程靠谱得多。第二个建议从今天开始建一个自己的练习库。不要只跟着教程敲命令而是想一个你真正感兴趣的小场景比如个人记账本、读书清单、电影收藏记录然后用我们前面学到的方式建表、录入数据、做查询。用自己的数据练手印象深得多也更容易发现实际操作中的问题。第三个建议刻意练习写SELECT语句。我发现很多新手把精力花在花式建表、反复练习插入删除上但实际工作中查询才是使用频率最高、也最能体现水平的操作。每天抽二十分钟从最简单的单表查询开始逐步尝试WHERE多条件组合、ORDER BY、LIMIT分页再到后面的JOIN多表关联、GROUP BY分组统计慢慢你会发现自己写SQL越来越有感觉。这篇是系列的第一篇后续我会按照由浅入深的顺序把MySQL的完整体系拆开讲透。下一篇计划聊聊数据查询的进阶操作包括条件过滤、模糊匹配、排序分页以及聚合函数的实际用法都是实操性很强的内容。最后说一个我亲眼见过很多次的场景有人装好了MySQL跑通了几个简单命令就觉得自己会数据库了结果面试一问JOIN怎么用、索引为什么快当场卡壳。所以别急着赶进度把基础命令用熟把每一个报错真正搞懂慢就是快。
返回列表