MYSQL的登录和断开以及SQL查询常见问题
1.登录数据库
通过windows的dos命令窗口
Win键 + R键,输入cmd
- 要连接到服务器,在调用MySQL时,通常需要提供MySQL用户名和密码。如果服务器运行在您登录的机器以外的计算机上,则还必须指定一个主机IP。知道这些信息后,就可以连接数据库。
格式如下:
> mysql -h host-u user -p
参数详解:
-h :MySQL服务器的主机,对应host
-u:MySQL帐户的用户名,对应user
-p:密码
根据你的环境的替换成相应的值
如果您在运行MySQL的同一台机器上登录,那么可以忽略-h host
,使用以下格式:
> mysql -u root -p
如果登录成功,你会看到一些介绍性的信息,然后是一个mysql>
提示符
当您试图登录时,如果得到一个错误消息,例如
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql. sock’ (2)
表示MySQL服务器守护进程(Unix)或服务(Windows)没有运行。请参考 MySQL入门_实战1_安装数据库 章节内容。
2.断开数据库
成功连接后,您可以在mysql>
提示符后输入exit、quit(或\q)随时断开连接。
mysql> exit
Bye
或者
mysql> quit
Bye
或者
mysql> \q
Bye
在Linux或者Unix上,您也可以通过按下Ctrl + D
键来断开连接。
3.SQL查询常见问题
- 请确保您已连接到数据库服务器。本节介绍了输入查询的基本原则,并您可以通过几个查询来熟悉mysql的工作原理。
下面是一个简单的查询,它要求服务器返回它的版本号和当前日期。在mysql>
提示下输入如下所示,然后按Enter:
mysql> SELECT VERSION(), CURRENT_DATE;
+-----------+--------------+
| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 8.0.30 | 2022-09-08 |
+-----------+--------------+
1 row in set (0.01 sec)
通过这个查询说明了关于mysql的一些事情:
- 查询通常由一个SQL语句后跟一个分号组成。(也有一些例外可以省略分号。前面提到的QUIT就是其中之一。我们稍后再讨论其他问题。)
- 当您发出查询时,mysql将其发送到服务器进行执行并显示结果,然后打印另一个mysql>提示符,以表明它已经准备好进行另一个查询。
- mysql以表格形式(行和列)显示查询输出。第一行包含这些列的标签。下面各行是查询结果。通常,列标签是您从数据库表中获取的列的名称。如果要检索表达式的值而不是表列,例如上面例子中的VERSION(),mysql将使用表达式本身对该列进行标签。
- mysql显示了返回了多少行以及执行查询时所需的时间,这让您对服务器性能有了一个粗略的概念。
关键字可以用任何字母大小组合输入。以下查询是等效的,但是建议大家规范书写。
mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;
这是另一个查询,它演示了您可以使用mysql作为一个简单的计算器:
mysql> SELECT (1+2)*5;
+---------+
| (1+2)*5 |
+---------+
| 15 |
+---------+
到目前为止,所显示的查询都是相对较短的单行语句。您甚至可以在一行上输入多个语句。每个字母的结尾都有一个分号:
mysql> SELECT VERSION(); SELECT NOW();
+-----------+
| VERSION() |
+-----------+
| 8.0.30 |
+-----------+
1 row in set (0.00 sec)
+---------------------+
| NOW() |
+---------------------+
| 2022-09-08 21:56:41 |
+---------------------+
1 row in set (0.00 sec)
mysql>
查询不需要在一行上全部给出,因此需要几行的冗长查询不是问题。mysql通过查找分号而不是查找输入行的结尾来确定语句的结束位置。(换句话说,mysql接受自由格式的输入:它接收输入行,但直到看到分号时才执行它们。)
下面是一个简单的多行语句:
mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
+----------------+--------------+
| USER() | CURRENT_DATE |
+----------------+--------------+
| root@localhost | 2022-09-08 |
+----------------+--------------+
1 row in set (0.01 sec)
mysql>
在本例中,请注意在输入多行查询的第一行后,提示符如何从
mysql>
更改为->
。这就是mysql表示它还没有看到完整的语句,正在等待SQL其余部分。提示符是很有帮助,因为它提供了有价值的反馈。您根据这个反馈可以随时知道mysql在等待什么。
如果您决定不执行正在输入的查询,请输入\c
取消它:
mysql> SELECT
-> USER()
-> \c
mysql>
在这里,也请注意在您输入\c
后,它会切换回mysql>
,并提供反馈以表明mysql已经准备好进行新的查询。
下表显示了您可能看到的每个提示,并总结了它们对mysql所在状态的含义。
提示符 | 含义 |
---|---|
mysql> | 为新查询做好准备 |
-> | 正在等待多行查询的下一行输入 |
'> | 等待下一行,等待以单引号(‘)开头的字符串的完成 |
"> | 等待下一行,等待以双引号(“)开头的字符串的完成 |
`> | 等待下一行,等待完成以后退勾行开始的标识符(`) |
/*> | 等待下一行,等待以/*开头的注释完成 |
当您打算在单行上发出查询,但忘记了加分号
时,通常会意外地出现多行语句提示符 ->
。在这种情况下,mysql等待继续输入:
mysql> SELECT USER()
->
如果这种情况发生在您身上(您认为您已经输入完成了一个语句,但是返回的却是一个->
提示符),那么很可能是mysql正在等待分号。如果你没注意到提示符,在那儿干坐着等了一会儿,然后才意识到你忘记加分号了。此时输入一个分号,然后mysql就会执行它:
mysql> SELECT USER()
-> ;
+----------------+
| USER() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql>
‘>
和“>
提示发生在字符串接收期间(另一种说法,MySQL正在等待字符串输入完成)。在MySQL中,您可以编写由''
或“字符”
包围的字符串(例如,'hello'
或“再见”
),并且MySQL允许您输入跨越多行的字符串。当您看到‘>
或“>
提示符时,这意味着您输入了一行包含以’
或"
引号字符开头的字符串,但尚未输入终止该字符串的匹配引号。这通常表明您无意中遗漏了一个引号。例如:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>
如果输入此SQL,然后按enter并等待结果,则什么都不会发生。不要想为什么这个查询需要这么长时间,请注意'>
提示符提供的线索。它告诉您,mysql希望看到一个未终止的字符串的其余部分。
(你发现上面语句中的错误了吗?字符串
'Smith'
缺少第二个单引号。)
如果遇到这种情况,你会做什么?最简单的方法是取消该查询。但是,在这种情况下,您不能只键入\c,因为mysql将其解释为它正在接收的字符串的一部分。相反,输入结束的单引号字符(')
,这样mysql知道您已经完成了字符串),然后键入\c:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'> '\c
mysql>
提示符变回mysql>
,表明mysql已经准备好进行新的查询,重新输入正确的SQL。
SELECT * FROM my_table WHERE name = 'Smith' AND age < 30;
通过本节练习,您可以掌握MYSQL的登录和断开以及SQL查询中常见的问题。
如果该文章有帮助到您,请 点赞 支持,谢谢!
有任何疑问,欢迎在评论中留言。