MySQL教程/输入查询

第三章输入查询

请确保您已连接到服务器,如前一节所述。这样做本身并没有选择要使用的数据库,但这是可以的。在这一点上,了解一下如何发出查询比直接创建表、将数据加载到表中并从中检索数据更重要。本节描述输入查询的基本原则,使用几个您可以尝试的查询来熟悉如何输入查询mysql的工作原理。

下面是一个简单的查询,它要求服务器告诉您它的版本号和当前日期。输入它,如下所示mysql >提示并按Enter:

mysql> SELECT VERSION(),当前日期;+-----------+--------------+ | 版本()|当前日期  | +-----------+--------------+ | 5.8.0-m17 | 2015-12-21  | +-----------+--------------+ 1行集(0.02秒)mysql >

这个查询说明了关于mysql

  • 查询通常由一个后跟分号的SQL语句组成。(有一些例外,分号可以省略。辞职,就是其中之一。我们稍后再谈其他的。)

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

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

  • mysql显示返回了多少行以及执行查询所需的时间,这让您对服务器性能有一个粗略的了解。这些值是不精确的,因为它们表示挂钟时间(而不是CPU或机器时间),而且它们受到服务器负载和网络延迟等因素的影响。(为简便起见,行设置在本章其余的例子中,有时没有显示Line。)

关键字可以用任何字母形式输入。以下查询是等价的:

mysql> SELECT VERSION(),当前日期;Mysql > select version(),当前日期;mysql> SeLeCt vErSiOn(), current_DATE;

这是另一个问题。它演示了你可以使用mysql作为一个简单的计算器:

mysql> SELECT (PI()/4), (4+1)*5;+------------------+---------+ | SIN(π()/ 4)| (4 + 1)* 5  | +------------------+---------+ | 0.70710678118655 | 25  | +------------------+---------+ 1行集(0.02秒)

到目前为止显示的查询都是相对简短的单行语句。您甚至可以在一行中输入多个语句。只需在每一个结尾加一个分号:

mysql >选择版本();现在选择();+-----------+ | 版本 () | +-----------+ | 8.0.13  | +-----------+ 1行组(0.00秒 ) +---------------------+ | 现在 () | +---------------------+ | 2018-08-24 00:56:40  | +---------------------+ 1行集(0.00秒)

查询不需要在一行上给出所有的查询,因此需要几行的长查询不是问题。mysql通过查找结束分号来确定语句的结束位置,而不是通过查找输入行的结束。(换句话说,mysql接受自由格式的输入:它收集输入行,但直到看到分号才执行它们。)

下面是一个简单的多行语句:

mysql> SELECT -> USER() ->, -> CURRENT_DATE;+---------------+--------------+ | 用户()|当前日期  | +---------------+--------------+ | jon@localhost | 2018-08-24  | +---------------+--------------+

在本例中,注意提示如何从mysql >->在输入多行查询的第一行之后。这就是mysql指示它还没有看到完整的语句,正在等待剩余的语句。提示是你的朋友,因为它提供了有价值的反馈。如果你使用这些反馈,你总是可以知道什么mysql正在等待。

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

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

这里,也要注意提示符。它切换回mysql >在你输入\ c,提供反馈来表明mysql已为新查询做好准备。

下表显示了您可能看到的每个提示,并总结了它们对状态的含义mysql是在。

提示 意义
mysql > 准备好新查询
-> 等待多行查询的下一行
' > 等待下一行,等待以单引号开始的字符串完成(
" > 等待下一行,等待以双引号(
' > 等待下一行,等待完成以反勾号开始的标识符(
/ * > 等待下一行,等待以。开始的注释完成/*

当您打算在单行上发出查询,但忘记了结束分号时,通常会意外地出现多行语句。在这种情况下,mysql等待更多的输入:

mysql> SELECT USER(

如果这种情况发生在你身上(你认为你输入了一个语句,但唯一的响应是一个->提示),最有可能mysql正在等待分号。如果您没有注意到提示所告诉您的内容,您可能会在那里坐上一段时间,然后才意识到需要做什么。输入分号完成语句,然后mysql执行:

mysql> SELECT USER()—>;+---------------+ | 用户 () | +---------------+ | jon@localhost  | +---------------+

' >而且" >在字符串收集过程中会出现提示(另一种说法是MySQL正在等待字符串的完成)。在MySQL中,你可以用任意一种方式写字符串字符(例如,“你好”“再见”),mysql允许您输入跨越多行的字符串。当你看到' >" >提示符,这意味着您已经输入了包含以引号字符,但尚未输入终止字符串的匹配引号。这通常表示您无意中遗漏了一个引号字符。例如:

SELECT * FROM my_table WHERE name = 'Smith AND age < 30;' >

如果你输入这个选择声明中,然后按输入然后等待结果,什么也没发生。的线索提供的线索,而不是想知道为什么这个查询要花这么长时间' >提示。它告诉你mysql期望看到未结束字符串的其余部分。(你看到陈述中的错误了吗?的字符串“史密斯缺少第二个单引号。)

这时候,你该怎么办?最简单的方法是取消查询。但是,不能只打字\ c在这种情况下,因为mysql将其解释为它正在收集的字符串的一部分。相反,输入结束引号字符(somysql知道您已经完成了字符串),然后键入\ c

SELECT * FROM my_table WHERE name = 'Smith AND age < 30;' > ' \ c mysql >

提示符变回mysql >,这表明mysql已为新查询做好准备。

' >提示符类似于' >而且" >提示,但指示您已经开始但尚未完成一个带引号的标识符。

重要的是要知道' >" >,' >提示表示,因为如果您错误地输入了一个未结束的字符串,则您输入的任何进一步的行将被忽略mysql-包括一行包含辞职.这可能非常令人困惑,特别是如果您不知道需要在取消当前查询之前提供终止报价。

请注意

从这一点开始,编写多行语句时不再使用辅助语句(->或其他)提示,以便更容易地复制和粘贴语句,自己尝试。