第一单元 · 连接、建表、查询 · 第 1 / 21 节
连上服务器,认清两个提示符
从 PowerShell 登录服务器,执行 mysql-learning 进入 mysql>,确认当前库,区分退出 MySQL 与退出 SSH。
约 15 分钟。做完这一节,你能从自己的电脑一路进到 mysql>,也能原路退回来。
这一页是独立的动手路径,不需要配合视频,也不按视频的时间点组织。
开始前先说清楚两块屏幕怎么用:左边网页看步骤,右边开一个 PowerShell 窗口跟着敲。每一个代码块里只有要输入的内容,复制粘贴就能用;紧跟在后面的输出块是屏幕会显示的样子,用来对照,不要复制。
$ / mysql> 提示符和输出。已完成 0 / 5 步
你现在在哪个提示符
打开 PowerShell,光标前通常是这样:
PS C:\Users\你的名字>
这是 Windows 自己的命令行,它只认你电脑上的东西。SSH 登录成功以后,同一个窗口会变成服务器的 Linux 命令行:
root@iZ7xvfx4kssqec2zzn99q9Z:~#
再敲 mysql-learning,提示符会变成:
mysql>
三层,三个不同的程序在等你输入。命令敲错层,是新手最常见的卡点,所以每一节开头都先认这个。
| 提示符 | 你在哪 | 这里能敲什么 |
|---|---|---|
PS C:\Users\你的名字> | 你自己的 Windows 电脑 | ssh、dir 这类本机命令 |
root@iZ7xvfx4kssqec2zzn99q9Z:~# | 阿里云服务器的 Linux | mysql-learning、ls、exit |
mysql> | MySQL 客户端,默认已经在 itcast 库 | SQL,句尾要有分号 |
提示符就是程序等你输入时显示的一个记号。它本身不执行任何东西,只告诉你现在是谁在听你说话。
第一步:从电脑连到服务器
在 PowerShell 里输入:
ssh root@8.148.204.152
第一次连这台机器,SSH 会问你是否信任这台主机,大致是 Are you sure you want to continue connecting (yes/no/[fingerprint])?。输入 yes 再回车。提示里的指纹以你屏幕显示的为准,不用和我这里的核对。
接着会出现:
root@8.148.204.152's password:
输入你手上的服务器密码,然后回车。光标不会动,也不会出现星号,这是 Linux 的正常行为,不是卡住了。密码只输入给 SSH,不要写进网页、聊天记录或截图。
登录成功后,提示符会从 PS ...> 变成 root@iZ7xvfx4kssqec2zzn99q9Z:~#。看到这个,说明你已经站在服务器上了。
第二步:进入 MySQL
在服务器命令行输入:
mysql-learning
mysql-learning 是一个进入练习库的快捷命令,mysql-course 是它的别名,两个完全一样。你会看到类似这样的几行(部署验收时记录,节选):
MySQL 8.0.46 课程练习库 · 已进入 itcast(账号 course)
Welcome to the MySQL monitor. Commands end with ; or \g.
Server version: 8.0.46-0ubuntu0.24.04.4 (Ubuntu)
mysql>
最后那个 mysql> 才是 MySQL 在等你。从这里开始,敲的每一句都是 SQL,不再是 Linux 命令。
这里有两个词先记住:
- 库(database):一台 MySQL 服务里按名字分开的容器,你的是
itcast。 - 表(table):库里真正存数据的二维表格,有列名,有一行行记录。
course 这个账号只有 itcast 库的权限,所以你看不到别人的库,也改不到。这是有意设计的,放心在里面练。
第三步:确认自己站在哪
在 mysql> 后面输入这一句,回车:
SELECT DATABASE(), VERSION(), @@lower_case_table_names;
你会看到:
+------------+-------------------------+--------------------------+
| DATABASE() | VERSION() | @@lower_case_table_names |
+------------+-------------------------+--------------------------+
| itcast | 8.0.46-0ubuntu0.24.04.4 | 1 |
+------------+-------------------------+--------------------------+
1 row in set (0.00 sec)
这张结果表只有 1 行、3 列。第一行是列名,中间的横线只是边框,1 row in set 表示查到 1 行。
- 第 1 列
DATABASE()的值是itcast,说明你当前在哪个库。 - 第 2 列
VERSION()的值是8.0.46-0ubuntu0.24.04.4,这是服务器的 MySQL 版本。 - 第 3 列
@@lower_case_table_names的值是1,意思是表名不区分大小写,和视频里的 Windows 行为一致。
DATABASE() 和 VERSION() 是 MySQL 自带的函数,作用是返回一个值;@@ 开头的是系统变量,作用是告诉你服务器当前的设置。现在不用记语法,只要会读这张表。
第四步:空库不是坏库
再输入:
SHOW TABLES;
输出是:
Empty set (0.00 sec)
Empty set 的意思是:查询执行成功了,只是这个库里一张表都没有。它不是报错。真正的错误一定以 ERROR 开头,后面跟一个编号,比如 ERROR 1146。
如果 SHOW TABLES 显示了几张表,说明库里已经有别的练习表,可能是课程表,也可能是你自己之前建的。这不影响本单元,只要 lesson01_students 这个名字没被占用就行。接着确认一下:
SHOW TABLES LIKE 'lesson01_students';
会看到:
Empty set (0.00 sec)
LIKE 'lesson01_students' 是只挑这个名字的表。结果还是 Empty set,说明这个名字空着,下一节可以放心用。如果这里已经有一行,说明你之前建过这张表:先别重建,翻到第 2 节的「重复学习怎么办」,看清现有数据再决定。
为什么表名要带 lesson01_ 前缀:课程后面会用 emp、tb_user 这些表,它们各有好几套结构。你用自己的前缀,就不会和课程表重名,也不会在练习时覆盖别人的数据。
第五步:怎么退出去
在 mysql> 里输入:
exit
回到服务器的 root@...:~#。这时 MySQL 客户端关了,但 MySQL 服务还在跑,数据也还在。
在 Linux 提示符下再输入一次:
exit
SSH 连接关闭,窗口回到你电脑的 PS C:\Users\...>。
两层 exit 别混:第一个只退出 MySQL,第二个才断开服务器。断开连接不会删数据,下次登录、重新 mysql-learning,表还在。这一点下一节会亲眼看到。
常见卡点
密码敲了没反应
Linux 输入密码时不回显,连星号都没有。继续输完,直接回车。不要因为屏幕没变化就反复回车。
连不上服务器
常见提示是 Connection timed out 或 Connection refused。先检查三件事:IP 是不是 8.148.204.152,本机网络是否正常,端口是不是 22。不要把密码贴到聊天、网页表单或截图里求助。也不需要通过开放 3306 端口来解决,数据库只允许服务器本机访问。
mysql-learning: command not found
先看提示符。如果还是 PS C:\Users\...>,说明你根本没登录服务器,先执行 ssh root@8.148.204.152。如果已经在 root@...:~# 还提示找不到,说明服务器环境有问题,找管理员,不要自己装一个 MySQL 上去。
在 Linux 里直接敲了 SQL
比如在 root@...:~# 后面输入 SELECT DATABASE();,bash 会报 syntax error near unexpected token 或者 command not found。Linux 不认识 SQL。先 mysql-learning 再敲。
在 mysql> 里敲了 Linux 命令
反过来也不行。mysql> 只认 SQL,输入 ls 会得到 ERROR 1064 语法错误。要执行 Linux 命令,先 exit 回服务器。
少了分号
输入 SELECT DATABASE() 就回车,提示符会从 mysql> 变成 ->。屏幕上是这样(只是示意,不要整段复制):
mysql> SELECT DATABASE()
-> ;
-> 不是报错,它表示这条语句还没结束,在等你补分号。补一个 ; 回车就会执行;不想继续,输入 \c 回车,回到干净的 mysql>。分号是 SQL 语句的结束标记,客户端看到它才开始执行。
中文和引号
连接和库都是 utf8mb4,中文可以直接输入、正常显示。字符串要用英文单引号,比如 '上海'。中文引号 “上海” 不是 SQL 的字符串边界,会报错。名字里本身带英文单引号时,写两个单引号表示一个,例如 '王''强'。下一节会有这条的真实输出。
1046 是什么
说明 ERROR 1046 No database selected(这个环境基本遇不到)
mysql-learning 启动时已经默认选了 itcast,所以正常跟着做不会出现 1046。只有用一个没带库名的客户端连进来,才会看到:
ERROR 1046 (3D000): No database selected
意思是:连上服务器了,但没选库,MySQL 不知道去哪个库里找表。解决办法是先选库(USE itcast;),或者直接退出重进 mysql-learning。它不是权限问题,也不是数据坏了。
练习
先自己想,再展开对答案。
1. 不看上面,按顺序说出三个提示符,以及每一层能敲什么。
参考答案 对答案
PS C:\Users\...> 是电脑上的 PowerShell,敲 ssh;root@iZ7xvfx4kssqec2zzn99q9Z:~# 是服务器的 Linux,敲 mysql-learning;mysql> 是 MySQL 客户端,敲 SQL。
**2. 在 mysql> 里执行 SELECT DATABASE();,结果表的列名是什么?值是什么?**
参考答案 对答案
列名就是 DATABASE(),值是 itcast。列名不一定和函数名一样短,MySQL 会直接用表达式本身当列名,除非你用 AS 起别名。
**3. 故意输入 SELECT id, 再回车,看到 -> 后输入 \c。-> 在等什么?\c 做了什么?**
参考答案 对答案
-> 在等语句结束的分号,因为这条 SQL 还没写完。\c 取消当前正在输入的这一条,不执行,直接回到 mysql>。
**4. 退到 Linux 提示符,再 mysql-learning 进来,SELECT DATABASE(); 还是 itcast 吗?**
参考答案 对答案
还是 itcast。exit 只关闭客户端,不会切库,也不会清数据;重新进入时快捷命令仍然默认选 itcast。
做到这里
做到这里今天可以停。你已经会进出服务器和 MySQL,本节没有建任何表,也没有改任何数据。
下一节从“表不存在”开始,在 itcast 里建一张 lesson01_students,放 5 行数据。不需要提前准备别的,也不用切换什么阶段。
说明 这一节和视频课、讲义是什么关系(可选读)
主题对应课程开头讲连接和命令行的部分,但本页不按视频时间组织,也不要求你看视频。所有 SQL 都是本教程自己写的,并在 MySQL 8.0.46 隔离实例上逐条跑过。
你的服务器是 8.0.46,不是视频里的 8.0.26,也不是 Windows。同一大版本下,本单元用到的连接、建表、插入、查询行为一致;版本差异不影响这里的步骤。