![MySQL 8.0从入门到实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/498/52842498/b_52842498.jpg)
2.2 连接数据库和基本信息查询
数据库设计好了,本节就来连接数据库并进行基本信息查询。
2.2.1 连接数据库
要连接到SQL服务器,需要在调用MySQL时提供用户名,并且很可能需要提供密码。如果SQL服务器在其他计算机上运行,还必须指定主机名。此时应联系管理员,了解该使用哪些连接参数来进行连接(即使用的主机、用户名和密码)。当知道正确的参数之后,可以执行如下命令进行连接:
shell> mysql -h host -u user -p Enter password: ********
host和user分别代表运行的MySQL服务器的主机名和MySQL账户的用户名。********代表密码,当MySQL显示“Enter password:”提示时,输入账户对应的密码。如果输入密码正确,那么会看到如下信息:
shell> mysql -h host -u user -p Enter password: ******** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 25338 to server version: 8.0.25-standard Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
出现“mysql>”提示符就表示可以输入SQL语句了。
如果在运行MySQL的同一台计算机上登录,则可以省略主机名,只需执行以下命令:
shell> mysql -u user -p
如果在尝试登录时收到错误提示信息,例如ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2),则表示MySQL服务器守护程序(在UNIX操作系统中)或服务(在Windows操作系统中)未运行,也就是需要启动MySQL服务。
2.2.2 基本信息查询
本小节将介绍信息查询的基本原则,通过几个查询示例来熟悉MySQL的工作原理。
例2.4 查询服务器的版本号和当前日期。在“mysql>”提示符后面输入如下命令,然后按Enter键:
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-P43_001.jpg?sign=1739569012-PtS8mO1qVfAftewVjc5iutGmbbG2QVai-0-5f9506c1ce23e0dd7c67f3db39af33de)
这是一个简单的查询,说明了有关MySQL查询的几点信息:
(1)查询通常由以分号结尾的SQL语句组成(有一些例外可以省略分号,QUIT语句就是其中之一)。
(2)当我们输入查询语句后,MySQL将它发送到服务器执行并显示结果,然后显示出下一个“mysql>”提示符,表明它已准备好接收另一个查询。
(3)MySQL以表格形式(行和列)显示查询的结果。第一行是列的标签(或称为列名),其他行是查询的结果。通常列标签是从数据库表中提取的列名称。如果要检索表达式的值而不是表列的值,那么MySQL会使用表达式本身来标记该列。
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-P43_7140.jpg?sign=1739569012-ZQCWypMN06qZyzolCit1YS5yFlVT5UI0-0-948695b48a94938ed54954e689892eb8)
图2-2 SQL关键字不区分字母大小写示例
(4)MySQL显示返回了多少行数据以及执行查询用了多长时间,由此我们大致可以了解服务器的性能。不过这些值是不精确的,因为它们代表的是时钟时间,并且受到服务器负载和网络延迟等因素的影响。
例2.5 使用不同字母大小写进行相同内容的查询。
mysql> SELECT VERSION(), CURRENT_DATE; mysql> select version(), current_date; mysql> SeLeCt vErSiOn(), current_DATE;
查询结果如图2-2所示,在查询时,输入的SQL语句中的关键字可以不区分字母大小写,最后输出的答案是一致的,也不会抛出任何异常。
例2.6 把MySQL用作计算器。
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-P44_7144.jpg?sign=1739569012-Zuz2MiTG2AwkKOz66GlnIlisY3ocf6Ps-0-d2d47265091690f9ee003f63d772f8ec)
执行结果如图2-3所示,MySQL给出了计算结果。
例2.7 用分号分隔多条SQL语句。
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-P44_8837.jpg?sign=1739569012-yN63ie6dQvuMyBQaT5ZPe6BdqHSqUMSj-0-be56350f2168753c257ea42dd792799f)
执行结果如图2-4所示,可以在一行中输入多条SQL语句(或命令),每条SQL语句之间只需用分号分隔即可。
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-P44_1754.jpg?sign=1739569012-HWmz12cnTtC5IfM5PlZtLSXjovldnplf-0-bfd5794976a6972b70fdc838848e9c1d)
图2-3 MySQL作为计算器
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-P44_1755.jpg?sign=1739569012-MbU2vxudwG5FE3HGYAWtxEkSxI9BKcpU-0-051778f70e94649f155f5344ea29694e)
图2-4 一行执行多条SQL语句
例2.8 MySQL可以写成多行的形式,最后带上终止分号即可。
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-P44_8840.jpg?sign=1739569012-p33OvaOenAscmYdwrlfq2vqT50VAWzwH-0-72fd9dacb5335396ecf7ab7076ba292f)
上述SQL语句的执行结果如图2-5所示。如果一条SQL查询语句冗长,在一行内写不下,那么可以写成多行的形式,最后带上终止分号即可,因为MySQL不是在每一行的末尾去找代表SQL语句结束的分号,而是在多个连续行去找分号来确定语句的结束位置。(MySQL接收自由格式的输入,在看到分号之后才会执行当前的SQL查询语句),当我们不输入分号时,之前输入的命令是不会被执行的。
例2.9 取消查询。
mysql> select -> users -> \c mysql>
执行结果如图2-6所示,当输入“\c”之后,当前输入的命令就被取消执行了。
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-P45_1823.jpg?sign=1739569012-sDNYbJ8QRfJxaysmHorQ3HYKZdnDutlM-0-ed1d6295c72b7bdc74c9b3f73d084748)
图2-5 多行查询
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-P45_1824.jpg?sign=1739569012-Msvv6hB9KdGX8V64CqcWFk3I0dlb6bif-0-3ac9d95da20b3d8378cdb326ecabe5ef)
图2-6 取消执行当前输入的SQL命令
需要注意的是,在输入取消命令“\c”之后,MySQL回到“mysql>”提示符状态,表示已准备好接收新的查询。表2-11总结了MySQL显示不同提示符时所处的状态。
表2-11 MySQL所处状态的含义
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-T45_1825.jpg?sign=1739569012-ckwzMeQ07OGclqDHhFTWA98MWDuESoUn-0-f4bb80c3231180e94a724195d95260cb)
(1)当以单行输入查询语句时,如果忘记以分号结尾,那么MySQL会一直等待我们输入“;”:
mysql> select user() ->
如果发生这种情况(我们认为已经输入完成一条查询语句,而唯一的响应是“->”提示符),那么很可能就是MySQL在等待分号。输入分号之后,MySQL才会开始执行输入的SQL查询语句:
![](https://epubservercos.yuewen.com/BF694F/31397495103149706/epubprivate/OEBPS/Images/Figure-P46_7159.jpg?sign=1739569012-3EAO9SyZLftIHu6kcIEN0qA1s2cDsJJ3-0-7034b38ae5b2c683a18a077ca204e784)
(2)“'>”和“">”提示符表示当前正处于字符串的收集过程中(即表示MySQL正在等待用户输入表示字符串终止的配对符号)。在MySQL中,我们可以编写由一对“'”或一对“"”作为起止的字符串,而MySQL允许输入跨多行的字符串。当看到“'>”或“">”提示符时,表示输入了包含以“'”或“"”开头的字符串,但尚未输入终止字符串的配对引号。例如:
mysql> select * from mytable where name = 'clay and age <18; '>
如果输入此select语句,然后按Enter键并等待结果,则没有任何反应。此时我们需要注意“'>”提示符提供的线索。它其实是告诉我们:MySQL希望看到字符串的其余部分(语句中clay开始的字符串缺少了第二个单引号)。此时我们可以选择输入“\c”取消本次查询语句的执行:
mysql> select * from mytable where name = clay and age < 18; '> '\c mysql>
提示符又变回“mysql>”,表明MySQL再次就绪,可以接收新的查询。