☰
MySQL实训从零上手:建库建表到查询避坑指南
2026/10/31 7:44:58 网站建设 项目流程

简介:这份PDF面向正在学习或备考MySQL数据库实训的学生与初学者,针对头歌平台实训题目提供可直接对照的参考答案,帮助解决建库建表、约束设置与表结构修改等练习中卡壳的问题。资源为单个PDF文件,压缩包约433KB,正文按实训关卡组织并配有目录,便于按知识点快速定位查阅。内容覆盖数据库定义与操作、主键与外键及唯一约束的应用、查看表结构与修改表名、修改字段名与数据类型、添加删除字段、调整字段排列位置、删除外键约束,以及插入与更新数据等常见关卡,每关均给出完整SQL语句与执行上下文,可对照理解语法细节与书写规范。目前已有18400人学习下载,适合课堂实训跟练、考前复习与作业自查时参考。

1. 零基础也能上手的 MySQL 实训:从一条 CREATE DATABASE 开始

刚接触数据库实训的人,最常见的困惑不是“SQL 难不难”,而是打开实训平台后盯着空白的代码框发呆:题目让我建库、建表、加约束,可我连第一行该敲什么都不知道。这份 MySQL 数据库实训答案资源,本质上就是一份“照着敲就能跑通”的参考手册——它把从建库建表、约束、增删改查,到单表查询、连接查询、子查询、聚合函数、视图、索引、存储过程的一整条学习路径,按关卡拆成了可以直接粘贴的语句。适合谁?适合刚学数据库、正在做实训作业、看得懂中文但看不懂报错信息的新手。你不需要先成为 SQL 高手,只需要愿意打开终端,一条一条跟着敲。

2. 先搞懂它在练什么:数据库实训到底在训练哪种能力

2.1 数据库不是“存东西的文件夹”,而是有规则的数据仓库

很多人第一次听到“数据库”会联想到 Excel。区别在于,Excel 靠人自觉,数据库靠规则强制。你在表里定义id INT PRIMARY KEY,数据库就替你保证这一列不会重复、不会为空;你定义外键,它就替你拦住“学生指向一个不存在的班级”这种脏数据。实训里反复出现的约束、字段类型、主键外键,练的就是“把规则写进结构里”的能力。这份答案资源覆盖的第一块内容——数据定义与操作实战——正是让你亲手把这些规则敲出来,而不是背概念。

2.2 实训关卡的设计逻辑:从建库到复杂查询是一条爬坡路

翻一遍这份资源的目录结构,你会发现它按难度排了序:先创建数据库和表,再加主键、外键、常用约束,然后是查看表结构、修改表名、改字段、加删字段,接着是插入、更新、删除数据,再往后才是单表查询、连接查询、子查询、聚合函数、视图、索引、存储过程。这个顺序不是随便排的——没有表就没法插数据,没有数据就没法查询,没有单表查询的基础就写不出连接查询。新手最容易犯的错是跳过前面的建表直接去看复杂查询,结果连tb_emp里有哪些字段都不知道,抄了也看不懂。入门的话建议先老老实实把第 1 关到第 5 关的建库建表敲一遍,后面会顺很多。

2.3 为什么值得跟着练:SQL 是少数“练一次管很久”的技能

数据库实训的题目看起来琐碎,但每道题背后都是一个真实场景的缩影。比如“查询大于所有平均年龄的员工姓名与年龄”练的是子查询,“查询班级中第 2 名到第 5 名的学生信息”练的是LIMIT分页,“交换工资”那道题练的是CASE WHEN的条件更新。这些写法在你以后做后台开发、数据分析、甚至整理自己电脑里的表格时都会反复用到。我第一次学的时候也觉得GROUP BY和HAVING的顺序很玄学,直到自己手动改错一次、看到报错信息,才真正记住。这份资源的价值就在于:它把“正确写法”摆在你面前,你可以先跑通,再回头理解为什么这么写。

3. 第一个例子怎么跑:从建库到查出一条数据

3.1 先连上数据库,别急着写业务语句

所有关卡的第一步几乎都是同一句连接命令。以资源里出现的写法为例:

# 连接本机 MySQL,用户名为 root,密码为 123123,主机为 127.0.0.1 mysql -uroot -p123123 -h127.0.0.1

这条命令的意思是:用root这个账号,密码123123,连接到本机(127.0.0.1)的 MySQL 服务。-u后面跟用户名,-p后面直接跟密码(注意-p和密码之间没有空格),-h后面跟主机地址。敲完回车,如果看到mysql>提示符,说明连上了;如果报Access denied,先检查密码有没有多打空格;如果报Can't connect,说明本机 MySQL 服务没启动。这一步是整个实训的地基,连不上后面全白搭。

3.2 建一个库、建一张表,把最小闭环跑通

连上之后,照着资源里“初识 MySQL 数据库”部分的第 1 关和第 2 关,先建库再建表:

-- 创建一个名为 TestDb 的数据库 CREATE DATABASE TestDb; -- 切换到刚创建的数据库 USE TestDb; -- 创建一张员工表,包含编号、姓名、部门编号、薪资四个字段 CREATE TABLE t_emp ( id INT, name VARCHAR(32), deptId INT, salary FLOAT );

逐行解释:CREATE DATABASE是建库,库名自己起,这里叫TestDb;USE是“进入”这个库,后面所有操作都发生在这个库里;CREATE TABLE是建表,括号里每一行是一个字段,格式是“字段名 类型”。INT存整数,VARCHAR(32)存最多 32 个字符的文本,FLOAT存小数。注意每条语句末尾的分号不能丢,MySQL 靠分号判断一句话说完了。跑完这三条,用SHOW TABLES;能看到t_emp,用DESCRIBE t_emp;能看到四个字段的结构,第一个闭环就成了。

3.3 插一条数据再查出来,感受“写进去”和“读出来”

表建好后,接着做“数据库和表的基本操作(二)”里的插入和查询:

-- 向 t_emp 表插入一条员工记录 INSERT INTO t_emp (Id, Name, DeptId, Salary) VALUES (1, 'Nancy', 301, 2300.00); -- 查询 t_emp 表的所有数据 SELECT * FROM t_emp;

INSERT INTO后面跟表名和字段列表,VALUES后面跟对应顺序的值,字符串用单引号包起来。SELECT *里的星号表示“所有字段”,执行后应该看到一行 Nancy 的记录。如果插入时报“字段数量不匹配”,检查字段列表和值的个数是否一致;如果查询结果是空的,检查是不是忘了USE TestDb;切到正确的库。这一步跑通,你就完成了“建库→建表→插数据→查数据”的完整链路,后面所有关卡都是在这个链路上加条件、加函数、加连接。

4. 新手最容易翻车的几个地方:避坑与排查

4.1 现象:语句粘贴进去报语法错误,明明和答案一模一样

原因通常有三个:一是分号用了中文全角;,MySQL 不认;二是复制时把答案里的注释符号#或--后面的内容也带进去了,某些客户端对注释处理不一致;三是字段名用了反引号但粘贴时丢了。解决方式:把语句末尾统一改成英文分号,粘贴后先扫一眼有没有中文标点,字段名如果和关键字冲突(比如name、score)用反引号包起来。血泪经验是,报错信息里带near的那一段,往往就是出错位置的前后几个字符,盯着那里看比从头重读快得多。

4.2 现象:建外键时报 “Cannot add or update a child row” 或 “errno 150”

原因:外键要求“子表里的值必须在父表里存在”,同时两张表的字段类型必须一致。资源里t_student的classId引用t_class的id,如果t_class还没建、或者id的类型和classId不一致(一个INT一个INT(11)在某些版本下也会出问题),就会报这个错。解决:先建父表t_class并插入对应 id,再建子表;建之前用DESCRIBE确认两边字段类型完全一致。另外,如果之前建失败留下了半张表,先DROP TABLE清掉再重来,别在脏结构上硬改。

4.3 现象:GROUP BY查询报 “Expression #N of SELECT list is not in GROUP BY clause”

原因:MySQL 较新版本默认开启了ONLY_FULL_GROUP_BY,要求SELECT里出现的非聚合字段必须出现在GROUP BY里。资源里有些分组查询写法比较宽松,直接粘贴可能在新版本上报错。解决:要么把SELECT里多出来的字段补进GROUP BY,要么在会话级别临时关掉这个模式(SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));),但建议新手优先改查询语句本身,养成规范写法的习惯,别一上来就改服务器配置。

4.4 现象:LIKE查询查不到本该匹配的数据

原因:LIKE的匹配符%表示任意多个字符,_表示单个字符,但很多人把%写成了中文的“%”,或者把LIKE "C%"写成了LIKE "C %"(多了一个空格)。资源里“带 LIKE 的字符匹配查询”用的是Name LIKE "C%",意思是“以 C 开头”。解决:确认百分号是英文半角,确认引号内没有多余空格,确认大小写——MySQL 默认排序规则下字符串比较不区分大小写,但如果表用了二进制排序规则就会区分,查不到时先用SELECT Name FROM tb_emp;看一眼实际存的值长什么样。

4.5 现象:存储过程创建后调用报错,或者DELIMITER没生效

原因:存储过程内部有分号,如果不改分隔符,MySQL 会在第一个分号处就认为语句结束。资源里用了delimiter $$和delimiter //两种写法,作用是临时把语句结束符从;换成$$或//,创建完再换回来。新手常犯的错是只写了delimiter $$却没在END后面补$$,或者创建完忘了delimiter ;导致后续普通语句全部失效。解决:严格按“改分隔符→CREATE PROCEDURE→END 加新分隔符→改回分号”四步走,中间不要插别的语句。

5. 从会抄到会写:下一步该练什么、怎么练

跑通前面那些关卡之后,你手里已经有一批能用的语句了,但“能跑”和“会写”之间还差一层。我的建议是分三步走。第一步,把资源里同一类操作横向对比着看:比如所有ALTER TABLE的题放在一起,你会发现改表名用RENAME、改字段名用CHANGE、只改类型用MODIFY、加字段用ADD、删字段用DROP,这几个动词的区别就是一张表结构操作的“动词表”,自己整理一遍比抄十遍都管用。第二步,把答案里的表名、字段名、条件值改掉再跑一遍:比如把Salary > 3000改成Salary > 2500,把LIKE "C%"改成LIKE "%n%",观察结果变化,这一步是在训练“参数意识”——SQL 的灵活性全在条件里。第三步,挑一道复杂查询题,先不看答案自己写,写完再对照,重点看自己漏了哪个JOIN条件或者GROUP BY字段。下面这张表可以当作你自查的路线图:

阶段练什么判断标准
第 1 周建库、建表、约束、增删改不看答案能独立建出带主外键的两张表
第 2 周单表查询、聚合、分组能说清WHERE和HAVING的执行顺序差别
第 3 周连接查询、子查询能判断一道题该用JOIN还是子查询
第 4 周视图、索引、存储过程能解释索引为什么能加快查询、存储过程适合什么场景

还有一个具体技巧:每次跑完一条查询,顺手在语句前面加EXPLAIN,比如EXPLAIN SELECT * FROM tb_emp WHERE Salary > 3000;,它会告诉你 MySQL 打算怎么执行这条语句、有没有走索引。新手不需要看懂全部字段,只看type和rows两列就够——type是ALL说明全表扫描,rows数字很大说明扫了很多行,这时候就该想想是不是该给条件字段加索引了。这个习惯我从第一次做慢查询排查时被逼着养成,后来每次写完稍复杂的查询都会下意识加一句EXPLAIN,翻车次数明显少了。希望这些能帮到你,先从第一条CREATE DATABASE敲起,别怕报错,报错信息就是最好的老师。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询