MySQL教程-输入查询

发布于:2024-05-16 ⋅ 阅读:(70) ⋅ 点赞:(0)

确保您已连接到服务器,如前一节所讨论的。这本身并不会选择任何要处理的数据库,但这没关系。此刻,更重要的是了解如何发出查询,而不是马上开始创建表格、加载数据,并从中检索数据。本节描述了输入查询的基本原则,使用一些查询示例来熟悉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 row in set (0.02 sec)

到目前为止所展示的查询都比较简短,是单行语句。甚至可以在单行上输入多个语句。只需用分号结束每个语句即可:

mysql> SELECT VERSION(); SELECT NOW();
 +-----------+
 | VERSION() |
 +-----------+
 | 8.0.13    |
 +-----------+
 1 row in set (0.00 sec)
 +---------------------+
 | NOW()               |
 +---------------------+
 | 2018-08-24 00:56:40 |
 +---------------------+
 1 row in set (0.00 sec)

一个查询不一定要完全在一行上给出,因此需要多行的长查询并不是问题。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> 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语句,然后按Enter并等待结果,什么也不会发生。与其想知道为什么这个查询如此耗时,不如留意由'>提示提供的线索。它告诉您mysql期望看到未终止字符串的其余部分。(您看到语句中的错误了吗?字符串'Smith缺少第二个单引号。)

在这种情况下,您该怎么办?最简单的方法是取消查询。但是,在这种情况下,您不能只是键入\c,因为mysql会将其解释为正在收集的字符串的一部分。相反,请输入结束引号字符(这样mysql就知道您已完成字符串),然后键入\c:

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

提示符会变回mysql>,表明mysql已准备好接受新查询。

`>提示类似于'> 和 ">提示,但表示您已开始但尚未完成反引号引用的标识符。

重要的是要知道',">和`>提示符的意义,因为如果您错误地输入了未终止的字符串,您输入的任何进一步行都似乎被mysql忽略了,包括包含QUIT的行。这可能会非常令人困惑,特别是如果您不知道在取消当前查询之前需要提供终止引号。