ARTICLE DETAIL

资讯详情

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

MySQL零基础操作指南:从建库建表到增删改查

MySQL零基础操作指南:从建库建表到增删改查 很多零基础的朋友想学 MySQL但一上来就被各种教程拽进 SQL 语法里——今天背 SELECT明天练 INSERT结果学了两周连数据库和表到底是什么关系都说不清楚。我自己带过不少新人也看过太多半途而废的例子问题几乎都出在同一个地方概念地基没打好就开始急着敲命令。这篇 MySQL 数据库零基础操作指南就是想把学习顺序掰回来——先讲清楚数据库到底是干什么的、表为什么长这样再动手装环境、建表、写增删改查。适合完全没接触过数据库的初学者也适合学过一点但感觉自己只会复制粘贴命令的朋友。读完你能自己建库、建表、存数据、查数据并且遇到乱码、权限、连接不上这些经典问题时知道该从哪个方向去排查。1. 零基础学 MySQL先把数据库这个概念彻底搞明白很多新手最大的障碍不是操作难而是概念抽象。你要先明白 MySQL 到底解决什么问题后面的命令才学得有意义。这一章花点篇幅把最核心的几个概念讲透。1.1 数据库和 Excel 表格有什么本质区别我第一次给别人讲数据库时总会问一个问题你平时用 Excel 存数据为什么还要学数据库答案是Excel 是给人看的表格工具MySQL 是给程序当长期记忆的工具。想象一下你开了一家小卖部记流水账。Excel 就像一本带格式的账本你自己翻、自己写很直观。但如果你有一个收银系统顾客一扫码程序要立刻查到这个商品卖多少钱、库存还剩多少、这单要不要算优惠并且可能同时有几十个顾客在结账。这时候靠人打开 Excel 看一眼完全不现实。数据库干的事情就是把数据存起来并且让程序能高效地存、高效地查、安全地改。MySQL 是目前最流行的开源关系型数据库之一它的特点是数据按表来组织表和表之间可以建立关系。这也是它和 Excel 最大的分水岭Excel 里你靠多个 Sheet 手动维护关联数据库里你可以通过外键、JOIN 查询让数据之间的关系一目了然。1.2 MySQL 在整个技术体系里的角色定位你用微信聊天聊天记录存在手机里你点外卖订单状态存在服务商的系统里。几乎所有需要记住用户状态的软件背后都有一个数据库。网站、App、企业内部系统、物联网平台MySQL 都是最常见的选择之一。MySQL 的角色可以用一个比喻来理解程序是大脑数据库是记忆皮层。大脑负责思考和处理但所有关键的记忆都要存到一个地方下次才能想起来。而且一个人记不住太多细节数据库却能像图书馆一样把海量数据按目录整齐地存放随取随用。所以学会 MySQL 不只是学会一个软件的使用方法而是理解了任何复杂系统都要解决数据怎么存、怎么管、怎么查这个通用问题。你以后哪怕不写代码和开发人员沟通时能说清数据怎么组织也会顺畅很多。1.3 数据库里最常见的几个名词一句话解释数据库Database装着所有表的大仓库。一个项目通常会有一个独立的数据库比如订单系统库或学生管理系统库。表Table仓库里的一个货架每一行是一条完整记录每一列是一种属性。比如一张学生表一行就是一个学生列就是学号、姓名、年龄。字段Column表里的一个列规定了这一列存什么类型的数据。记录Row表里的一行一条具体的数据。主键Primary Key每一行数据的身份证号必须唯一且不能为空。这些名词你后面会反复遇到。现在只需要有个印象等我们实际建表时再回来看它们自然就通了。2. 环境安装MySQL 到底怎么装零基础该选哪条路概念讲清楚了接下来要动手。但零零基础最容易卡在安装这一步。我见过有人折腾两天装不上直接放弃。其实只要选对方式安装很快。2.1 三种常见安装方式先搞清楚它们适合谁我在不同电脑上试过好几种装法给零基础的朋友做个对比安装方式适合场景优点缺点官网下载安装包MSI/源码Windows 用户、想装官方纯净版版本明确配置可控官方支持步骤稍多新手可能漏配环境变量系统包管理器安装apt/yumLinux 服务器或虚拟机一条命令装完服务自动注册版本可能不是最新但足够用集成环境XAMPP/LAMP/Docker只想练习 SQL、不想纠结配置一键启动自带 PHPMyAdmin 图形工具目录结构和原生安装不同容易让新手混淆我的建议很简单零基础在 Windows 上直接去官网下 MySQL Community Server 的 MSI 安装包在 Linux 上用系统自带的包管理器安装。不建议一开始就碰 Docker因为你还分不清容器里的数据库和系统里的数据库有什么区别出了问题更难排查。集成环境可以用但最好知道它只是个包了一层皮的 MySQL。2.2 Windows 安装过程详解MSI 方式打开 MySQL 官网下载页选择 MySQL Community Server下载 MSI 安装包。下载时选 64 位还是 32 位看你自己电脑系统现在基本都是 64 位。双击安装包进入安装类型选择界面。新手别选Full选Server only就行只装数据库服务器不用装那些开发组件干净省事。进入 Configuration 界面时有几步容易纠结端口保持默认 3306除非你已经知道 3306 被占用才改。认证方式如果让你选选Use Strong Password Encryption即可。设置 root 用户密码。这个密码一定记好后面所有连接数据库的操作都要靠它。安装完成后打开服务WinR 输入 services.msc找到 MySQL 开头的服务确认状态是正在运行。如果没启动点右键选择启动。装完以后还要确认一个事命令行能不能找到 mysql 命令。在开始菜单搜索Command Prompt或PowerShell输入mysql --version如果提示找不到命令说明 MySQL 的 bin 目录没加到系统环境变量 PATH 里。可以手动把安装目录下的 bin 路径加进去比如C:\Program Files\MySQL\MySQL Server 8.0\bin。嫌麻烦的话也可以直接用开始菜单里的 MySQL Command Line Client它不需要配环境变量。2.3 Linux 安装过程详解以 Ubuntu/CentOS 为例在 UbuntuDebian 系上sudo apt update sudo apt install mysql-server在 CentOSRedHat 系上sudo yum install mysql-serverCentOS 装完后先启动服务sudo systemctl start mysqld sudo systemctl enable mysqldUbuntu 上服务名是 mysql 而不是 mysqldsudo systemctl start mysql sudo systemctl enable mysqlLinux 装完后默认 root 账号可能是通过系统认证的你用sudo mysql可以登录进去然后再手动设置密码。这也是新手最容易卡住的地方明明设置了密码但用密码登录却报错。原因就是新装的 MySQL 默认允许 root 通过 auth_socket 方式登录密码认证反而被限制了。解决办法是登录后用一条 SQL 改动认证方式但这里先不展开后面避坑章节会专门讲。2.4 第一次登录验证安装是否成功无论哪个系统安装完成后做一次完整验证非常关键。在命令行执行mysql -u root -p输入密码后如果出现mysql提示符说明你已经进入了 MySQL 的命令行终端。在这里输入SELECT VERSION();看到类似8.0.44这样的输出恭喜你环境已经通了。这一步过去后面的路就顺了。3. 库和表的结构设计建库建表之前必须想清楚的事环境装好能登录了接下来进入实质操作。很多人迫不及待想插入数据但我会先带你把表结构设计好。因为数据库的处理方式很死板字段类型不匹配数据根本写不进去或者存进去变成脏数据。结构设计对了后面写 SQL 才能顺手。3.1 建库语法与字符集选择一步决定后面中文乱不乱在 MySQL 里第一步是创建数据库。基本语法很简单CREATE DATABASE IF NOT EXISTS school;但真正值得注意的不是语法而是字符集。我见过太多初学者建库时没指定字符集结果插入中文后查询出来是一堆问号。MySQL 8.0 默认字符集虽然已经是 utf8mb4但如果你在旧版本上练习或者用某些工具连接很可能默认是 latin1。所以稳妥做法是建库时明确指定字符集和排序规则CREATE DATABASE IF NOT EXISTS school DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;utf8mb4 是 UTF-8 的完整实现能存下中文、表情符号等所有 Unicode 字符。utf8mb4_general_ci是排序规则ci 表示 case insensitive不区分大小写适合大部分场景。这里有一个经验建库时花几秒钟写一下字符集可以避免未来所有乱码问题。3.2 数据类型选择的三个实用原则建表时每个字段都要指定数据类型。新手最常见的错误是一律用 VARCHAR图省事。这种做法短期没问题但会导致存储空间浪费、查询速度变慢甚至数据校验失效。我把常用数据类型做了一个分类数据类型用途示例INT / BIGINT整数比如年龄、数量、学号18、128987VARCHAR(n)可变长度字符串比如姓名、地址张三、北京市海淀区CHAR(n)固定长度字符串比如身份证号、固定编码身份证号 18 位DATETIME / TIMESTAMP日期和时间比如创建时间2024-12-01 10:30:00DECIMAL(m,d)精确小数比如金额199.99m 是总位数d 是小数位TEXT长文本比如文章正文............................选择原则其实就三条能用数字存储的不用字符串。年龄用 INT而不要用 VARCHAR因为查年龄大于 18 岁的人在数字类型上效率高。字符串要定长就定长不要滥设超长。VARCHAR(255) 是常用默认值但如果你的字段只需要存一个手机号设 VARCHAR(11) 就够建索引也更快。时间和金额这种字段有专门类型就用专门类型。日期有排序和计算需求字符串无法直接比较大小金额用 DECIMAL 可以避免浮点误差。3.3 主键到底怎么选自增 ID 是最省心的方案表里一定要有一列作为主键。主键的作用是唯一标识每一行记录就像每个人的身份证号。零基础阶段我强烈推荐用自增整数做主键CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, age INT, phone VARCHAR(20) );AUTO_INCREMENT的意思是每次插入新数据时id 自动加 1你完全不用手动管它。为什么推荐这种设计因为主键必须唯一、稳定、不能为空用业务字段比如姓名、手机号很容易撞车而用户未来还可能改名、换号。自增 ID 是一个纯粹的行号永远不会变。有人会问那外键怎么办外键是另一张表里存的本表主键。比如成绩表里存学生 id就能关联到学生表。零基础阶段你不需要立刻用外键建表语法但你要养成一个意识多个表之间通过主键值来关联而不是把整条学生信息复制到每张表里。这是关系型数据库最核心的逻辑之一。3.4 用一条完整建表语句串联前面所有概念我们把学生表建出来同时再建一张成绩表看看表和表之间怎么关联CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, age INT, phone VARCHAR(20) ); CREATE TABLE score ( id INT PRIMARY KEY AUTO_INCREMENT, student_id INT NOT NULL, course_name VARCHAR(50), score DECIMAL(5,2), exam_time DATETIME );这里的score.student_id就是用来关联student.id的。你看到表结构时能说出每一列的类型和作用建表这一步就算过关了。哪怕暂时不会 JOIN 查询这个设计已经为后面的数据查询打好了基础。4. 增删改查实操每一条 SQL 背后究竟在做什么环境有了表也有了现在开始操作数据。增删改查CRUD是数据库最核心的四个操作Insert插入、Select查询、Update修改、Delete删除。很多教程会把语法直接丢给你但我更想解释每条命令背后的执行逻辑因为理解了逻辑你才不会被语法绑住。4.1 SELECT 的查询逻辑先确定表再过滤行最后挑列查询语句是最常用、也最容易越写越复杂的。零基础先理解好最基础的三段式SELECT 列名 FROM 表名 WHERE 条件;执行顺序的逻辑其实和我们找东西的思维一样先想清楚我要去哪个表里找FROM。再想清楚我要找哪些行WHERE 条件。最后想清楚我只需要看哪几列SELECT。举个例子查询所有年龄大于 20 岁的学生的姓名和电话SELECT name, phone FROM student WHERE age 20;如果你把SELECT *理解为把所有列都查出来这也是允许的但实际开发中我更建议只查需要的列。原因有两个一是数据量大时多查无用列会增加传输和内存消耗二是代码可读性差看到SELECT *你都不知道这语句到底想拿什么数据。4.2 ORDER BY 排序与 LIMIT 分页让查询结果可控零基础可能觉得排序就是加一句 ORDER BY 的事但其实它有两个容易忽略的点。排序是在 WHERE 过滤之后进行的而且默认是升序SELECT name, age FROM student WHERE age 20 ORDER BY age DESC;DESC 表示降序ASC 表示升序默认。LIMIT 用于控制返回行数多用于分页功能。比如查第 3 页每页 10 条下一页就是从第 21 条开始的 10 条SELECT * FROM student ORDER BY id LIMIT 20, 10;这里的 20 是跳过多少条10 是取多少条。需要特别注意不写 ORDER BY 就盲目用 LIMIT取出来的记录顺序没有保证。因为没有排序规则时MySQL 返回顺序是不稳定的分页结果会乱跳。实际项目中分页查询几乎总伴随着明确的排序字段。4.3 INSERT 插入数据先检查列再给值插入命令本身不难INSERT INTO student (name, age, phone) VALUES (张三, 20, 13800138000);但新手最先栽的坑往往是列名写错、列和值的数量不匹配、或者字符串忘了加引号。记住一个检查原则VALUES 里的值数量、顺序、类型必须严格对应前面的列名列表。另一个值得提醒的细节主键 id 用了自增所以插入时不要给它赋值让它自己生成。如果你强行赋了一个已存在的 id会触发主键冲突报错。4.4 UPDATE 和 DELETE写完 WHERE 再执行这是铁律修改和删除是最危险的命令因为它们会永久性地改变数据。我见过很多次新人兴致勃勃地执行UPDATE student SET age 20;结果全表所有学生的年龄都变成了 20。因为 UPDATE 不带 WHERE 条件时默认作用于全表。DELETE 同理DELETE FROM student;会清空整张表的数据。所以写 UPDATE 或 DELETE第一件事想清楚 WHERE 条件第二件事先 SELECT 一遍该条件确认查出来的行确实是你想改/删的再执行修改。我的实操习惯是危险操作前永远先跑一遍 SELECTSELECT * FROM student WHERE id 3; UPDATE student SET age 21 WHERE id 3;这样做虽然多一步但能挡住绝大多数误操作。4.5 一个完整的增删改查串联示例还是用之前的学生表从创建到查询走一遍完整流程你可以对着命令行敲-- 插入两条数据 INSERT INTO student (name, age, phone) VALUES (李四, 22, 13900139000); INSERT INTO student (name, age, phone) VALUES (王五, 19, 13700137000); -- 查询所有数据 SELECT * FROM student; -- 查询特定条件 SELECT name, age FROM student WHERE age 21; -- 修改王五的年龄 UPDATE student SET age 20 WHERE name 王五; -- 删除李四的数据 DELETE FROM student WHERE name 李四;注意上面的 UPDATE 用 name 作为条件只是示例。实际业务里建议都改用主键 id 作为条件因为姓名可能重复而 id 唯一。这一整套敲完你对增删改查的顺序和基本语法就有了完整手感。5. 零基础必踩的坑字符集、权限、误操作一次性讲透前面讲的都是正常流程但真实学习过程中难免遇到异常。我把零基础最容易碰到的几个典型问题集中讲一讲这些也是我平时答疑时被问得最多的。5.1 中文乱码建库时偷懒查询时流泪乱码问题前面提过一次现在展开说彻底。乱码的本质是存的时候用的字符集和查的时候用的字符集不一致。就好比你用中文写了封信对方用日文解码看到的全是乱码。排查乱码按顺序看三处数据库自己的字符集用SHOW CREATE DATABASE school;查看建库语句里指定的字符集。客户端的连接字符集命令行登录后执行SHOW VARIABLES LIKE character_set_client;看到 utf8mb4 最好。表本身的字符集SHOW CREATE TABLE student;查看建表语句最后一行的 CHARSET 值。如果表已经建错了可以直接修改ALTER TABLE student CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;但我要强调对已有表做字符集转换数据可能损坏所以最佳方案还是建库、建表时写对字符集。零基础阶段只要建库用了 utf8mb4后面乱码概率会大大降低。5.2 忘记 root 密码或者密码登录失败怎么办root 是 MySQL 的最高权限账号权限太大实际开发里基本不用它干日常活但学习阶段你肯定用它练习。两个常见问题问题一忘记 root 密码。这种时候的临时解决方案是绕过权限验证启动 MySQL然后用 SQL 重置密码。步骤大致如下以 Linux 为例停止 MySQL 服务sudo systemctl stop mysql用跳过权限表的方式启动sudo mysqld_safe --skip-grant-tables 进入 MySQLmysql -u root重置密码ALTER USER rootlocalhost IDENTIFIED BY 新密码;退出并重启服务。这个过程在 Windows 上操作路径略有不同而且不同的 MySQL 版本细节有差异这里只讲思路不展开。但我要郑重提醒这不是日常操作只是自救手段。跳过权限表启动时数据库处于完全不设防的状态操作完一定要立刻重启回正常模式。问题二Linux 上安装了 MySQL用密码怎么都登不上。前面提到过有些系统的 root 用户默认是通过 auth_socket 认证的。你在终端执行sudo mysql能进去但用mysql -u root -p输入密码却报错。解决思路是登录进去后把 root 的认证方式改成密码认证ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 你的密码; FLUSH PRIVILEGES;注意MySQL 8.0 官方推荐的是caching_sha2_password但很多老版本客户端工具不兼容这个认证插件。如果遇到客户端连接报认证失败把认证方式改成mysql_native_password通常是最快解法。5.3 误操作以后别慌备份意识和基本恢复思路最后聊聊误操作。零基础刚开始学手误删数据太正常了。关键是有没有后悔药吃。我建议从第一天就养成一个习惯重要练习数据定期导出备份。MySQL 导出备份最简单的方式是 mysqldumpmysqldump -u root -p school school_backup.sql这条命令把 school 整个库的结构和数据都导出到一个 SQL 文件里。万一后面把表删了、数据清了可以恢复mysql -u root -p school school_backup.sql备份文件就是你的存档点。玩过单机游戏都知道打 BOSS 前先存档。数据库操作也是这个道理执行危险操作前先把备份做一份心里就稳了。零基础阶段你不需要配置复杂的定时备份但手工备份这个动作一定学会并养成肌肉记忆。6. 一路练下来的一点个人建议最后说点实操感受。很多人学 MySQL 喜欢看视频、抄命令这本身没问题但看完一定要自己动手从头到尾走一遍流程——从建库、建表到插入数据、查询数据全套敲一遍。你在键盘上实际敲一遍犯的错比看十遍教程都管用。遇到报错时先把报错信息完整读一遍MySQL 的报错大多已经把原因说清楚了比如字段不存在、语法错误、权限不足。很多人栽跟头是因为只看报错里自己认识的单词断章取义。我的习惯是遇到错误先搜报错全文而不是急着改配置。如果你练到能独立完成新建数据库、设计两张有关联的表、插入一批数据、写出带条件排序的查询、把数据备份成 SQL 文件这一整套流程零基础的阶段就算顺利毕业了。接下来可以往索引、事务、多表连接这些方向走但那是后话了。但愿这篇指南能帮你把第一脚踩稳少走点弯路。
返回列表