查询
像前面章节讨论一样,请确保你已经连接到了服务器。連好之后,不要在里面查询任何数据庫,当然,你也可以查。在这个时候,相比直接跳到创建表,加载数据到表,然后从中检索数据,在先对查询有一定的了解,这是非常重要的,这部分描述了查询的基本原理,使用一些查询,你可以试着了解mysql是如何工作的。
这里有一个简单的查询例子,查询的是版本号和当前日期。在mysql命令提示符中像如下一样输入:
mysql> SELECT VERSION(), CURRENT_DATE;
+--------------+--------------+
| VERSION() | CURRENT_DATE |
+--------------+--------------+
| 5.7.1-m4-log | 2012-12-25 |
+--------------+--------------+
1 row in set (0.01 sec)
mysql>
这个查询描述了mysql的一些事情:
一个查询正常情况下包含一个SQL语句,然后跟上一个分号(;)(当然也有不输入分号的例外,如QUIT,还有其他的,随后会了解到),。
当你执行一个查询,mysql会把它发送到服务器执行并显示结果,然后打印另一个mysql>命令提示符,来为你的下一个查询作好准备。
mysql以表格(行和列)的方式显示查询结果。第一行包含列标签。接下来的行是查询结果。列标签是你从数据庫表中提取的列的名字。如果你正在检索的不是一个表的列,而是一个表达式的值,mysql会用表达式本身来标记列。
mysql会显示返回结果的行数和执行查询所消耗的时间,这可以给你一个服务性能的粗略显示。 这些时间值不是非常准确的,因为他们表示的是时钟时间(不是CPU或机器时间),因为他们会受到诸如加载和网络延迟的因子影响。(简单起见,在接下来的例子中,“rows in set"有时没有显示)
关键詞不区别大小写,以下查询是等价的:
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.7.10-ndb-7.5.1 |
+------------------+
1 row in set (0.00 sec)
+---------------------+
| NOW() |
+---------------------+
| 2016-01-29 18:02:55 |
+---------------------+
1 row in set (0.00 sec)
一个查询不需要把所有的都放一行,如此长的查询,需要放在多行不是问题,mysql决定你的语句是否结束是查找分号,而不是查找输入行的结尾。(换言之,mysql接受自行格式输入:它可以一直接受输入,直到看到分号)
以下是一个简单的多行语句:
mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
+---------------+--------------+
| USER() | CURRENT_DATE |
+---------------+--------------+
| jon@localhost | 2010-08-06 |
+---------------+--------------+
在这个例子中,注意到在你输入多行的第一行然后回车后,提示符是如何从mysql> 改变成->的,这告诉你,mysql还没有看到一个完整的语句,正在等待剩下的。提示符是你的朋友,因为他提供了有价值的反馈。如果你使用这个反馈,你可以一直感知到mysql正在等待。
如果你打算取消正在输入的查询,你可以输入\c,像下面一样:
mysql> SELECT
-> USER()
-> \c
mysql>
在这,可以注意到,在你输入\c之后,提示符切换回了mysql> 。以此提供了一个反馈,暗示已经为新的查询做好了准备。
以下表格显示了每一个提示符所表示的含义:
提示符 | 含义 |
---|---|
mysql> | 已为新的查询作好准备 |
-> | 正在等待多行的下一行 |
'> | 正在等待以单引号开头的字符串的下一行 |
"> | 正在等待以双引号开头的字符串的下一行 |
`> | 正在等待以(`)号开头的字符串的下一行 |
/*> | 正在等待以注释符(/*)开头的字符串的下一行 |
例如:
mysql> select user()`
`> `
-> /*
/*> */
-> '
'> '
-> "
"> "
-> \c