在创建表、导入数据、检索数据之前,有必要先了解一下如何发出查询.

这里是一个简单的命令,向服务器询问其版本号和当前的日期.在mysql>提示后面输入如下所示的内容,然后按Enter.

1
2
3
4
5
6
7
8
9
10
mysql> SELECT VERSION(), CURRENT_DATE;
+———————————+——————————————+
| VERSION() | CURRENT_DATE |
+———————————+——————————————+
| 5.6.17 | 2014-12-17 |
+———————————+——————————————+
1 row in set (0.00 sec)
mysql>

这个查询说明了一些mysql的相关内容:

  • 一条命令包含SQL语句和最后的分号;(在一些情况下分号也是可以省略的)
  • 当你发出一条命令,mysql将其发送给服务器,用来执行和显示结果,然后显示下一个mysql>提示,表明它已经准备好接收新的命令.
  • mysql以表格的形式显示查询结果.第一行包含列的标签,接下来的行包含查询结果.正常情况下,列的标签即从数据库取得的列名.如果你检索的是语句的值而不是一个列的值,mysql会使用语句自身作为列的标签.
  • mysql会显示返回了多少行,查询执行了多长时间,这能给出一个服务器运行的大概情况.但这些值是不精确的,因为它代表的是经过时间而不是CPU运行时间,会受到服务器装载、网络传输等因素的影响.

关键字对大小写不敏感,下面这些查询是等价的:

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

这是另外一个查询,它展示了可以使用mysql作为一个简单的计算器:

1
2
3
4
5
6
7
mysql> SELECT SIN(PI()/4), (4+1)\*5;
+—————————————————————+——————————+
| SIN(PI()/4) | (4+1)\*5 |
+—————————————————————+——————————+
| 0.70710678118654755 | 25 |
+—————————————————————+——————————+

你可以在一行输入多条命令,只需在每条命令的结尾加上分号;:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT VERSION(); SELECT NOW();
+———————————+
| VERSION() |
+———————————+
| 5.6.17 |
+———————————+
+—————————————————————+
| NOW() |
+—————————————————————+
| 2014-12-18 11:12:00 |
+—————————————————————+

一条命令也不需要全部输入在一行,mysql通过查找分号来判断你的输入是否结束,而不是查找输入行的结束符(换句话说,mysql接收空操作,它会接收输入行,直到遇到分号再来执行).

这里是一个多行输入的命令:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
+————————————————+——————————————+
| USER() | CURRENT_DATE |
+————————————————+——————————————+
| [email protected] | 2014-12-18 |
+————————————————+——————————————+

在这个例子中,你输入查询的第一行后,注意提示从mysql>变为->,这表明mysql未接收到一个完整的命令,正在等待进一步输入.提示会给出有价值的反馈.如果你注意到这个反馈,可以很好地利用它.

如果你不想执行你正在输入的命令,通过输入\c来取消:

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

这里注意在输入\c后,提示从->重新变为mysql>,表明mysql正在等待新命令的输入.

下面的表格给出了你可能会看到的提示,和它们所表明的mysql状态:

1
2
3
4
5
6
mysql> 等待新命令的输入.
-> 等待多行输入命令时的完整输入.
'> 等待一个以单引号开始的字符串的完整输入.
"> 等待一个以双引号开始的字符串的完整输入.
`> 等待一个以反引号开始的标识符的完整输入.
/*> 等待一个以/*开始的注释的完整输入.

当你本不打算多行输入命令时,却出现了->提示,很有可能是你忘记输入;,输入;,补全命令,让mysql执行它.

MySQL等待一个字符串的完整输入时,会出现'>">提示,在MySQL中,字符串由'"包含,例如:'hello',"goodbye",mysql允许你分多行输入一个字符串,当你看到'>">提示时,意味着,你使用'"开始了一个字符串的输入,但还没有输入匹配的引号来结束这个字符串的输入,例如:

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

这个时候,可以简单地取消这个命令.但是如果你在这个时候输入\c,mysql会将它作为字符串的一部分而接收.所以,先输入匹配的引号,再输入\c:

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

提示重新变为mysql>,等待新命令的输入.

`>'>">有类似的作用.

明白提示的含义非常重要,如果你错误地输入一个未闭合的字符串,后面输入的任何内容都会被mysql作为字符串的一部分而忽略,包括QUIT.

英文原文:

Entering Queries