MySQL教程之:输入查询

devtools/2025/1/14 18:27:11/

如上一节所述,确保您已连接到服务器。这样做本身不会选择任何要使用的数据库,但没关系。在这一点上,了解一下如何发出查询比直接创建表、加载数据和从中检索数据更重要。本节介绍输入查询的基本原则,使用几个查询,您可以尝试熟悉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或机器时间),也因为它们受到服务器负载和网络延时等因素的影响。(为简洁起见,“设置中的行”行有时不会在本章剩余的示例中显示。)
     

关键字可以在任何字母大小写中输入。以下查询是等效的:

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>

这里也注意到提示。在您键入\c后,它会切换回mysql>,提供反馈以指示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的行。这可能非常令人困惑,尤其是如果您不知道在取消当前查询之前需要提供终止引号。

从这一点开始,多行语句在没有辅助(->或其他)提示的情况下编写,以便更轻松地复制和粘贴语句以供自己尝试。


http://www.ppmy.cn/devtools/150186.html

相关文章

defineProps 和 Pinia 的使用方法和区别总结

1. defineProps 的使用方法和特点 1.1 使用方法 defineProps 是 Vue 3 中用于声明组件 props 的函数&#xff0c;通常在 <script setup> 中使用。它用于定义父组件传递给子组件的数据。 <!-- 子组件 --> <template><p>{{ message }}</p> <…

MathBuddyGUI:带控制系统仿真功能、积分运算的计算器,MATLAB课程设计

https://download.csdn.net/download/liu1813335/89286669 本人是此链接对应的代码编写者HPC2H2&#xff0c;发现我免费的代码被放上去收钱用了。 现提供我仓库的链接&#xff1a; MathBuddyGUI: MATLAB课设&#xff0c;一个带画图、输出模式转换、简单控制系统仿真等功能的…

windows和linux的抓包方式

1.实验准备&#xff1a; 一台windows主机&#xff0c;一台linux主机 wireshark使用&#xff1a; 打开wireshark&#xff0c;这些有波动的就代表可以有流量经过该网卡&#xff0c;选择一张有流量经过的网卡 可以看到很多的流量&#xff0c;然后可以使用过滤器来过滤想要的流量…

前端用json-server来Mock后端返回的数据处理

<html><body><div class"login-container"><h2>登录</h2><div class"login-form"><div class"form-group"><input type"text" id"username" placeholder"请输入用户名&q…

银河麒麟桌面操作系统搭建FTP服务器

一、操作环境 服务端&#xff1a;银河麒麟桌面操作系统V10 客户端&#xff1a;银河麒麟桌面操作系统V10 二、服务器配置 说明&#xff1a;以下命令均在终端执行。鼠标点击桌面右键&#xff0c;在终端中打开。 操作步骤&#xff1a; &#xff08;一&#xff09;安装vsftpd…

反弹SHELL不回显带外正反向连接防火墙出入站文件下载

什么是反弹shell 正向连接正向连接&#xff08;Forward Connection&#xff09;&#xff1a;正向连接是一种常见的网络通信模式&#xff0c;其中客户端主动发起连接到服务器或目标系统。正向连接通常用于客户端-服务器通信&#xff0c;客户端主动请求服务或资源&#xff0c;例如…

单元测试MockitoExtension和SpringExtension

1. MockitoExtension MockitoExtension 是 JUnit 5 提供的一个扩展&#xff0c;用于支持 Mockito 的集成。它可以自动初始化标记为 Mock、InjectMocks 等的 Mockito 对象&#xff0c;而不需要显式调用 MockitoAnnotations.initMocks(this)。 主要特点: 自动初始化 Mock、Spy…

ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders论文解读

论文地址&#xff1a;https://arxiv.org/abs/2301.00808 论文相对ConvNeXt V1的改进主要两点 全卷积掩码自编码器&#xff08;FCMAE&#xff09;Global Response Normalization&#xff0c;去除Layer scale 什么是layer scale 实验 先用FCMAE预训练&#xff0c;然后微调