在 MySQL 8 服务器社区版中,下面是SQL查询和命令MySQL Shell
的示例:
SELECT * FROM planet;
DESC planet;
SHOW DATABASES;
SHOW tables;
正如您所见,必须在句子末尾声明;
字符(或\g
根据情况声明字符)。\G
但我确实错误地意识到,无需执行use
命令即可更改数据库。 ;
因此,下面两个命令可以和平地工作:
use <datababase>
use <datababase>;
只是好奇:
问题
- 为什么
use
命令不需要;
执行?
老实说,我不确定这是否是这种情况下的独特命令,但为什么它与其他命令不同?
MySQL 客户端 ,
mysql
具有许多内置命令,例如clear
,help
,pager
,quit
,warnings
等等。内置命令由客户端处理,而不是以 SQL 语句的形式发送到 MySQL 服务器。它们主要控制客户端本身的行为。
当读取一行输入时,MySQL 客户端首先会对其进行简单的解析,检查它是否是内置命令之一。只有当它不是内置命令时,客户端才会将该语句发送到服务器。
由于特殊的解析,所有内置命令都不需要
;
终止命令。它们只需读取到行尾即可。您可以添加,;
但它会被忽略。请注意,我可以不使用分号来运行此命令:
内置命令之一是
use
。为什么它是内置命令,当你可以作为 SQL 语句运行USE
,并且这会影响服务器端的当前默认模式?内置命令
use
确实会影响mysql
客户端,因为客户端支持表名和列名的 Tab 补全。使用 更改默认架构use
会导致客户端读取新默认架构中的表列表,并将其添加到其自动补全哈希中。造成这种现象的原因是,mysql 客户端不仅接受需要用分号补全的 SQL 语句,还接受其自身不属于 SQL 语法的命令。您可以运行命令
?
或help
从 mysql 客户端查看可用命令列表。USE
是客户端命令之一,因此它不需要像DELIMITER
命令那样使用分号。在 MySQL 中,
USE
命令不需要分号 (;
) 来执行,因为它是一个完整的语句,MySQL 客户端可以解释它,而不需要依赖分号来表示命令的结束。但是,使用分号仍然是一种很好的做法,特别是在脚本或批处理中执行多个命令时,因为它有助于指示每个单独语句的结束。