这是一个简单的查询,要求服务器告诉您它的版本号和当前日期。在 mysql> 提示符后按此处所示键入它,然后按 Enter:
mysql> SELECT VERSION(), CURRENT_DATE;
+-----------+--------------+
| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 5.8.0-m17 | 2015-12-21 |
+-----------+--------------+
1 row in set (0.02 sec)
mysql>
mysql 显示返回了多少行以及查询执行了多长时间,这让您大致了解服务器性能。这些值是不精确的,因为它们代表挂钟时间(不是 CPU 或机器时间),而且它们受服务器负载和网络延迟等因素的影响。 (为简洁起见,本章其余示例中有时未显示“rows in set”行。)
关键字可以以任何字母大小写输入。以下查询是等效的:
mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;
这是另一个查询。它演示了您可以将 mysql 用作简单的计算器:
mysql> SELECT SIN(PI()/4), (4+1)*5;
+------------------+---------+
| SIN(PI()/4) | (4+1)*5 |
+------------------+---------+
| 0.70710678118655 | 25 |
+------------------+---------+
1 row in set (0.02 sec)
到目前为止显示的查询都是相对较短的单行语句。您甚至可以在一行中输入多个语句。只需用分号结束每个:
mysql> SELECT VERSION(); SELECT NOW();
+-----------+
| VERSION() |
+-----------+
| 8.0.13 |
+-----------+
1 row in set (0.00 sec)
+---------------------+
| NOW() |
+---------------------+
| 2018-08-24 00:56:40 |
+---------------------+
1 row in set (0.00 sec)
一个查询不需要在一行中全部给出,因此需要几行的冗长查询不是问题。 mysql 通过查找终止分号而不是查找输入行的结尾来确定语句的结束位置。 (换句话说,mysql 接受自由格式的输入:它收集输入行但在看到分号之前不会执行它们。)
mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
+---------------+--------------+
| USER() | CURRENT_DATE |
+---------------+--------------+
| jon@localhost | 2018-08-24 |
+---------------+--------------+
在此示例中,请注意在您输入多行查询的第一行后,提示如何从 mysql> 变为 ->。这就是 mysql 如何指示它尚未看到完整的语句并正在等待其余的语句。提示是您的朋友,因为它提供了有价值的反馈。如果您使用该反馈,您可以随时了解 mysql 正在等待什么。
如果您决定不想执行正在输入的查询,请键入 \c 取消它:
mysql> SELECT
-> USER()
-> \c
mysql>
在这里,也请注意提示。在您键入 \c 后,它会切换回 mysql>,提供反馈以指示 mysql 已准备好进行新查询。
下表显示了您可能会看到的每个提示,并总结了它们对 mysql 所处状态的含义。
提示符 | 含义 |
---|---|
mysql> | 准备好新的查询 |
-> | 等待多行查询的下一行 |
‘> | 等待下一行,等待以单引号 (‘) 开头的字符串完成 |
“> | 等待下一行,等待以双引号 (“) 开头的字符串完成 |
`> | 等待下一行,等待以反引号 (`) 开头的标识符的完成 |
/*> | 等待下一行,等待以 /* 开头的注释完成 |
当您打算在单行上发出查询时,通常会意外出现多行语句,但忘记了终止分号。在这种情况下,mysql 等待更多输入:
mysql> SELECT USER()
->
如果这发生在你身上(你认为你已经输入了一个语句,但唯一的响应是 -> 提示符),很可能 mysql 正在等待分号。如果您没有注意到提示告诉您什么,您可能会坐在那里一段时间,然后才意识到您需要做什么。输入分号完成语句,mysql执行:
mysql> SELECT USER()
-> ;
+---------------+
| USER() |
+---------------+
| jon@localhost |
+---------------+
‘> 和 “> 提示出现在字符串收集期间(另一种说法是 MySQL 正在等待字符串的完成)。在 MySQL 中,您可以编写由 ‘ 或 “ 字符包围的字符串(例如,’hello’ 或 “ goodbye”),而 mysql 允许您输入跨越多行的字符串。当您看到 ‘> 或 “> 提示时,这意味着您已输入包含以 ‘ 或 “ 引号字符开头的字符串的行,但尚未输入终止字符串的匹配引号。这通常表明您无意中遗漏了引号字符。例如:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>
如果您输入此 SELECT 语句,然后按 Enter 并等待结果,则没有任何反应。与其想知道为什么这个查询需要这么长时间,不如注意 ‘> 提示符提供的线索。它告诉您 mysql 期望看到未终止的字符串的其余部分。 (您看到语句中的错误了吗?字符串 ‘Smith 缺少第二个单引号。)
这个时候,你怎么办?最简单的事情是取消查询。但是,在这种情况下,您不能只键入 \c,因为 mysql 将其解释为它正在收集的字符串的一部分。相反,输入右引号字符(这样 mysql 就知道你已经完成了字符串),然后输入 \c:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'> '\c
mysql>
提示符变回 mysql>,表示 mysql 已准备好进行新的查询。
`> 提示符类似于 ‘> 和 “> 提示符,但表示您已开始但未完成反引号引号标识符。
了解 ‘>、”> 和 `> 提示符的含义很重要,因为如果您错误地输入了一个未终止的字符串,您键入的任何其他行似乎都会被 mysql 忽略——包括包含 QUIT 的行。这可能是令人困惑,尤其是如果您不知道在取消当前查询之前需要提供终止引号时。