3、MySQL 8.0参考手册 输入查询

时间:2022-02-16 05:44:49

确保您已连接到服务器,如前一节所述。这样做本身并不会选择任何数据库来处理,但这没关系。在这一点上,找出一些关于如何发出查询的问题比创建表格,将数据加载到表格以及从中检索数据更重要。本节介绍输入查询的基本原则,使用几个查询可以尝试熟悉mysql如何 工作。

这是一个简单的查询,要求服务器告诉你它的版本号和当前日期。按照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的几件事情 

  • 查询通常由一个SQL语句和一个分号组成。(有些例外可以省略分号QUIT,前面提到的是其中的一个,稍后我们会找到其他的。)

  • 当您发出查询时,mysql会将其发送到服务器以供执行并显示结果,然后打印另一个mysql>提示以指示它已准备好进行其他查询。

  • mysql以表格形式(行和列)显示查询输出。第一行包含列的标签。以下行是查询结果。通常,列标签是您从数据库表中获取的列的名称。如果您正在检索表达式的值而不是表格列(如上例所示), mysql会使用表达式本身标记列。

  • mysql会显示返回的行数和查询执行的时间,这会让您大致了解服务器的性能。这些值是不精确的,因为它们代表挂钟时间(而不是CPU或机器时间),并且因为它们受到服务器负载和网络延迟等因素的影响。(为了简洁起见, 本章其余示例中有时不会显示行中 ”)。

关键字可以输入任何信箱。以下查询是等效的:

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() |
+-----------+
| 5.8.0-m17 |
+-----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2015-12-21 14:06:10 |
+---------------------+
1 row in set (0.00 sec)

查询不需要在一行中全部提供,因此需要多行的冗长查询不成问题。 mysql通过查找终止分号来确定语句的结束位置,而不是查找输入行的结尾。(换句话说,mysql 接受*格式的输入:它收集输入行,但直到看到分号时才执行它们。)

这是一个简单的多行声明:

mysql> SELECT
 -> USER()
 -> ,
 -> CURRENT_DATE;
+---------------+--------------+
| USER() | CURRENT_DATE |
+---------------+--------------+
| jon@localhost | 2015-12-21 |
+---------------+--------------+

在这个例子中,请注意提示符从 mysql>->您输入一个多行查询的第一行后。这就是mysql如何 表示它尚未看到完整的声明并正在等待其余部分。提示是你的朋友,因为它提供了有价值的反馈。如果你使用这个反馈,你总是可以知道mysql 正在等待什么

如果您决定不想执行正在输入的查询,请通过键入\c以下内容来取消它 

mysql> SELECT
 -> USER()
 -> \c
mysql>

在这里,请注意提示。它会mysql>在您键入之后切换回来 \c,提供反馈以指示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这可能会令人困惑,特别是如果您不知道在取消当前查询之前需要提供终止报价。

本文翻译由学什么网翻译