5.2 输入查询

确保已连接到服务器,如上一节所述。这样做本身并不会选择要使用的任何数据库,但这没关系。此时,更重要的是了解如何发出查询,而不是直接开始创建表、将数据加载到表中以及从中检索数据。本节介绍输入查询的基本原理,并使用几个查询来熟悉mysql 的 工作原理。

这是一个简单的查询,要求服务器告诉您其版本号和当前日期。按照提示输入以下内容mysql>,然后按 Enter 键:

mysql> SELECT VERSION(), CURRENT_DATE;
+-----------+--------------+
| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 8.4.0-tr  | 2024-01-25   |
+-----------+--------------+
1 row in set (0.00 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() |
+-----------+
| 8.4.0-tr  |
+-----------+
1 row in set (0.00 sec)

+---------------------+
| NOW()               |
+---------------------+
| 2024-01-25 18:33:04 |
+---------------------+
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>
这里也要注意提示符。 mysql>输入 后,它会切换回\c,提供反馈以表明mysql已准备好进行新查询。

下表显示了您可能看到的每个提示,并总结了它们对 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。这可能会造成很大混乱,特别是如果您不知道需要提供终止引号才能取消当前查询。

笔记
从此时开始,多行语句都不再带有次要(->或其他)提示,以便于您更轻松地复制和粘贴语句以供自己尝试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值