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 行受影响 (0.02 秒)
到目前为止展示的查询都是相对简短的单行语句。你甚至可以在一行上输入多个语句。只需用分号结束每个语句即可:
mysql> SELECT VERSION(); SELECT NOW(); +-----------+ | VERSION() | +-----------+ | 8.0.13 | +-----------+ 1 行受影响 (0.00 秒) +---------------------+ | NOW() | +---------------------+ | 2018-08-24 00:56:40 | +---------------------+ 1 行受影响 (0.00 秒)
一个查询不必全部在一行上给出,因此需要多行的长查询不是问题。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() ->