查询

像前面章节讨论一样,请确保你已经连接到了服务器。連好之后,不要在里面查询任何数据庫,当然,你也可以查。在这个时候,相比直接跳到创建表,加载数据到表,然后从中检索数据,在先对查询有一定的了解,这是非常重要的,这部分描述了查询的基本原理,使用一些查询,你可以试着了解mysql是如何工作的。

这里有一个简单的查询例子,查询的是版本号和当前日期。在mysql命令提示符中像如下一样输入:

  1. mysql> SELECT VERSION(), CURRENT_DATE;
  2. +--------------+--------------+
  3. | VERSION() | CURRENT_DATE |
  4. +--------------+--------------+
  5. | 5.7.1-m4-log | 2012-12-25 |
  6. +--------------+--------------+
  7. 1 row in set (0.01 sec)
  8. mysql>

这个查询描述了mysql的一些事情:

一个查询正常情况下包含一个SQL语句,然后跟上一个分号(;)(当然也有不输入分号的例外,如QUIT,还有其他的,随后会了解到),。

当你执行一个查询,mysql会把它发送到服务器执行并显示结果,然后打印另一个mysql>命令提示符,来为你的下一个查询作好准备。

mysql以表格(行和列)的方式显示查询结果。第一行包含列标签。接下来的行是查询结果。列标签是你从数据庫表中提取的列的名字。如果你正在检索的不是一个表的列,而是一个表达式的值,mysql会用表达式本身来标记列。

mysql会显示返回结果的行数和执行查询所消耗的时间,这可以给你一个服务性能的粗略显示。这些时间值不是非常准确的,因为他们表示的是时钟时间(不是CPU或机器时间),因为他们会受到诸如加载和网络延迟的因子影响。(简单起见,在接下来的例子中,“rows in set"有时没有显示)

关键詞不区别大小写,以下查询是等价的:

  1. mysql> SELECT VERSION(), CURRENT_DATE;
  2. mysql> select version(), current_date;
  3. mysql> SeLeCt vErSiOn(), current_DATE;

以下是另一个查询,你可以使用mysql做一个简单的计算:

  1. mysql> SELECT SIN(PI()/4), (4+1)*5;
  2. +------------------+---------+
  3. | SIN(PI()/4) | (4+1)*5 |
  4. +------------------+---------+
  5. | 0.70710678118655 | 25 |
  6. +------------------+---------+
  7. 1 row in set (0.02 sec)

这些查询相对来说,比较短,也是单行语句。你可以在一行输入多条语句,仅仅需要在每一个语句后加上一个分号:

  1. mysql> SELECT VERSION(); SELECT NOW();
  2. +------------------+
  3. | VERSION() |
  4. +------------------+
  5. | 5.7.10-ndb-7.5.1 |
  6. +------------------+
  7. 1 row in set (0.00 sec)
  8. +---------------------+
  9. | NOW() |
  10. +---------------------+
  11. | 2016-01-29 18:02:55 |
  12. +---------------------+
  13. 1 row in set (0.00 sec)

一个查询不需要把所有的都放一行,如此长的查询,需要放在多行不是问题,mysql决定你的语句是否结束是查找分号,而不是查找输入行的结尾。(换言之,mysql接受自行格式输入:它可以一直接受输入,直到看到分号)

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

  1. mysql> SELECT
  2. -> USER()
  3. -> ,
  4. -> CURRENT_DATE;
  5. +---------------+--------------+
  6. | USER() | CURRENT_DATE |
  7. +---------------+--------------+
  8. | jon@localhost | 2010-08-06 |
  9. +---------------+--------------+

在这个例子中,注意到在你输入多行的第一行然后回车后,提示符是如何从mysql> 改变成->的,这告诉你,mysql还没有看到一个完整的语句,正在等待剩下的。提示符是你的朋友,因为他提供了有价值的反馈。如果你使用这个反馈,你可以一直感知到mysql正在等待。

如果你打算取消正在输入的查询,你可以输入\c,像下面一样:

  1. mysql> SELECT
  2. -> USER()
  3. -> \c
  4. mysql>

在这,可以注意到,在你输入\c之后,提示符切换回了mysql> 。以此提供了一个反馈,暗示已经为新的查询做好了准备。

以下表格显示了每一个提示符所表示的含义:

提示符 含义
mysql> 已为新的查询作好准备
-> 正在等待多行的下一行
'> 正在等待以单引号开头的字符串的下一行
"> 正在等待以双引号开头的字符串的下一行
`> 正在等待以(`)号开头的字符串的下一行
/*> 正在等待以注释符(/*)开头的字符串的下一行

例如:

  1. mysql> select user()`
  2. `> `
  3. -> /*
  4. /*> */
  5. -> '
  6. '> '
  7. -> "
  8. "> "
  9. -> \c

原文: https://strongyoung.gitbooks.io/mysql-reference-manual/content/tutorial/entering_quries.html