MySQL不看视频 · SSH 实操

第一单元 · 连接、建表、查询 · 第 1 / 21 节

连上服务器,认清两个提示符

从 PowerShell 登录服务器,执行 mysql-learning 进入 mysql>,确认当前库,区分退出 MySQL 与退出 SSH。

5 个步骤 · 进度只存本机

约 15 分钟。做完这一节,你能从自己的电脑一路进到 mysql>,也能原路退回来。

这一页是独立的动手路径,不需要配合视频,也不按视频的时间点组织。

开始前先说清楚两块屏幕怎么用:左边网页看步骤,右边开一个 PowerShell 窗口跟着敲。每一个代码块里只有要输入的内容,复制粘贴就能用;紧跟在后面的输出块是屏幕会显示的样子,用来对照,不要复制。

SSH / Linux 终端MySQL 终端输出示例(只读)复制按钮只复制命令,不含 $ / mysql> 提示符和输出。

已完成 0 / 5 步

你现在在哪个提示符

打开 PowerShell,光标前通常是这样:

输出示例(只读,不要粘贴执行)text不可复制
PS C:\Users\你的名字>

这是 Windows 自己的命令行,它只认你电脑上的东西。SSH 登录成功以后,同一个窗口会变成服务器的 Linux 命令行:

输出示例(只读,不要粘贴执行)text不可复制
root@iZ7xvfx4kssqec2zzn99q9Z:~#

再敲 mysql-learning,提示符会变成:

输出示例(只读,不要粘贴执行)text不可复制
mysql>

三层,三个不同的程序在等你输入。命令敲错层,是新手最常见的卡点,所以每一节开头都先认这个。

提示符你在哪这里能敲什么
PS C:\Users\你的名字>你自己的 Windows 电脑ssh、dir 这类本机命令
root@iZ7xvfx4kssqec2zzn99q9Z:~#阿里云服务器的 Linuxmysql-learning、ls、exit
mysql>MySQL 客户端,默认已经在 itcast 库SQL,句尾要有分号

提示符就是程序等你输入时显示的一个记号。它本身不执行任何东西,只告诉你现在是谁在听你说话。

第一步:从电脑连到服务器

在 PowerShell 里输入:

SSH / Linux 终端bash
ssh root@8.148.204.152

第一次连这台机器,SSH 会问你是否信任这台主机,大致是 Are you sure you want to continue connecting (yes/no/[fingerprint])?。输入 yes 再回车。提示里的指纹以你屏幕显示的为准,不用和我这里的核对。

接着会出现:

输出示例(只读,不要粘贴执行)text不可复制
root@8.148.204.152's password:

输入你手上的服务器密码,然后回车。光标不会动,也不会出现星号,这是 Linux 的正常行为,不是卡住了。密码只输入给 SSH,不要写进网页、聊天记录或截图。

登录成功后,提示符会从 PS ...> 变成 root@iZ7xvfx4kssqec2zzn99q9Z:~#。看到这个,说明你已经站在服务器上了。

第二步:进入 MySQL

在服务器命令行输入:

SSH / Linux 终端bash
mysql-learning

mysql-learning 是一个进入练习库的快捷命令,mysql-course 是它的别名,两个完全一样。你会看到类似这样的几行(部署验收时记录,节选):

输出示例(只读,不要粘贴执行)text不可复制
 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> 后面输入这一句,回车:

MySQL 终端sql
SELECT DATABASE(), VERSION(), @@lower_case_table_names;

你会看到:

输出示例(只读,不要粘贴执行)text不可复制
+------------+-------------------------+--------------------------+
| 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 自带的函数,作用是返回一个值;@@ 开头的是系统变量,作用是告诉你服务器当前的设置。现在不用记语法,只要会读这张表。

第四步:空库不是坏库

再输入:

MySQL 终端sql
SHOW TABLES;

输出是:

输出示例(只读,不要粘贴执行)text不可复制
Empty set (0.00 sec)

Empty set 的意思是:查询执行成功了,只是这个库里一张表都没有。它不是报错。真正的错误一定以 ERROR 开头,后面跟一个编号,比如 ERROR 1146。

如果 SHOW TABLES 显示了几张表,说明库里已经有别的练习表,可能是课程表,也可能是你自己之前建的。这不影响本单元,只要 lesson01_students 这个名字没被占用就行。接着确认一下:

MySQL 终端sql
SHOW TABLES LIKE 'lesson01_students';

会看到:

输出示例(只读,不要粘贴执行)text不可复制
Empty set (0.00 sec)

LIKE 'lesson01_students' 是只挑这个名字的表。结果还是 Empty set,说明这个名字空着,下一节可以放心用。如果这里已经有一行,说明你之前建过这张表:先别重建,翻到第 2 节的「重复学习怎么办」,看清现有数据再决定。

为什么表名要带 lesson01_ 前缀:课程后面会用 emp、tb_user 这些表,它们各有好几套结构。你用自己的前缀,就不会和课程表重名,也不会在练习时覆盖别人的数据。

第五步:怎么退出去

在 mysql> 里输入:

MySQL 终端sql
exit

回到服务器的 root@...:~#。这时 MySQL 客户端关了,但 MySQL 服务还在跑,数据也还在。

在 Linux 提示符下再输入一次:

SSH / Linux 终端bash
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> 变成 ->。屏幕上是这样(只是示意,不要整段复制):

输出示例(只读,不要粘贴执行)text不可复制
mysql> SELECT DATABASE()
    -> ;

-> 不是报错,它表示这条语句还没结束,在等你补分号。补一个 ; 回车就会执行;不想继续,输入 \c 回车,回到干净的 mysql>。分号是 SQL 语句的结束标记,客户端看到它才开始执行。

中文和引号

连接和库都是 utf8mb4,中文可以直接输入、正常显示。字符串要用英文单引号,比如 '上海'。中文引号 “上海” 不是 SQL 的字符串边界,会报错。名字里本身带英文单引号时,写两个单引号表示一个,例如 '王''强'。下一节会有这条的真实输出。

1046 是什么

说明 ERROR 1046 No database selected(这个环境基本遇不到)

mysql-learning 启动时已经默认选了 itcast,所以正常跟着做不会出现 1046。只有用一个没带库名的客户端连进来,才会看到:

输出示例(只读,不要粘贴执行)text不可复制
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。同一大版本下,本单元用到的连接、建表、插入、查询行为一致;版本差异不影响这里的步骤。