MySQL™ 参考手册(输入查询)

输入查询

确保已链接到服务器,如上一节中所述。这样作自己并不会选择任何可使用的数据库,但这不要紧,此时,更重要的是要找到一些关于如何发出查询的信息,而不是直接建立表,将数据加载到它们中以及从中检索数据。本节介绍了输入查询的基本原则,使用你能够尝试的几个查询来熟悉mysql的工做原理。mysql

这是一个简单的查询,要求服务器告诉你它的版本号和当前日期,在mysql>提示符后面输入以下所示,而后按Enter键:sql

mysql> SELECT VERSION(), CURRENT_DATE;
+-----------+--------------+
| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 5.8.0-m17 | 2019-07-09   |
+-----------+--------------+
1 row in set (0.02 sec)
mysql>

这个查询说明了几个关于mysql的东西:数据库

  • 查询一般由一个SQL语句后跟一个分号组成(有一些例外,能够省略分号,前面提到的QUIT就是其中之一,咱们稍后会找到其余)。
  • 当你发出查询时,mysql将其发送到服务器执行并显示结果,而后打印另外一个mysql>提示符以指示它已准备好进行另外一个查询。
  • mysql以表格形式显示查询输出(行和列),第一行包含列的标签,如下行是查询结果。一般,列标签是从数据库表中提取的列的名称,若是要检索表达式的值而不是表列(如刚刚显示的示例中所示),则mysql使用表达式自己标记列。
  • mysql显示返回了多少行以及执行查询所需的时间,这使你能够大体了解服务器性能。这些值不精确,由于它们表明时钟时间(不是CPU或机器时间),而且由于它们受服务器负载和网络延迟等因素的影响。

关键字能够输入任何大小写,如下查询是等效的:segmentfault

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()               |
+---------------------+
| 2019-07-09 00:01:40 |
+---------------------+
1 row in set (0.00 sec)

不须要在一行上给出所有查询,因此须要多行的长查询不是问题。mysql经过查找终止分号来肯定语句的结束位置,而不是查找输入行的结尾(换句话说,mysql接受自由格式输入:它收集输入行但在看到分号以前不执行它们)。性能

这是一个简单的多行语句:code

mysql> SELECT
    -> USER()
    -> ,
    -> CURRENT_DATE;
+---------------+--------------+
| USER()        | CURRENT_DATE |
+---------------+--------------+
| jon@localhost | 2019-07-09   |
+---------------+--------------+

在此示例中,请注意在输入多行查询的第一行后,提示如何从mysql>更改成->,这就是mysql如何代表它尚未看到完整的语句而且正在等待其他的语句,提示符号是你的朋友,由于它提供了有价值的反馈。若是你使用该反馈,你始终能够了解mysql正在等待什么。字符串

若是你决定不想执行正在输入的查询,请经过键入\c取消它:get

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语句,则按回车键并等待结果,没有任何反应,而不是想知道为何这个查询花了这么长时间,请注意'>提示符提供的线索。它告诉你mysql但愿看到未终止的字符串的其他部分(你是否在语句中看到错误?字符串'Smith缺乏第二个单引号)。

此时,你要作什么?最简单的方法是取消查询,可是,在这种状况下,你不能只键入\c,由于mysql将其解释为它正在收集的字符串的一部分。相反,输入结束引号字符(因此mysql知道你已经完成了字符串),而后键入\c

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

提示符更改回mysql>,表示mysql已准备好进行新查询。

`>提示符相似于'>“>提示符,但表示你已经开始但未完成反引号引用的标识符。

重要的是要知道'>“>`>提示符号是什么意思,由于若是你错误地输入了一个未终止的字符串,你输入的任何其余行彷佛都会被mysql忽略 — 包括一行包含QUIT的行。这可能很是使人困惑,特别是若是你不知道在取消当前查询以前须要提供终止引用。

此时的多行语句是在没有辅助( ->或其余)提示符的状况下编写的,以便更容易地复制和粘贴语句,以便你本身尝试。

上一篇:链接和断开服务器

相关文章
相关标签/搜索