在MySQL中,我们可以创建带有或不带有反引号(`)符号的查询。例如:


SELECT * FROM TEST;
SELECT * FROM `TEST`;

在mysql-console中都可以正常工作。



使用(`)比简单查询有什么好处吗?

#1 楼

它们称为带引号的标识符,它们告诉解析器将它们之间的文本作为文字字符串处理。当您具有包含关键字或空格的列或表时,它们很有用。例如,以下操作将不起作用:

CREATE TABLE my table (id INT);


但是以下操作将不起作用:

CREATE TABLE `my table` (id INT);


以下内容将导致错误,因为COUNT是保留关键字:

SELECT count FROM some_table


,但以下内容将被正确解析: >
希望对您有所帮助。

#2 楼

如果要在对象标识符周围使用某些东西,请至少使用标准双引号:“

这适用于MySQL,PostgreSQL,SQL Server,Oracle等。对于MySQL,您可能需要SQL模式ansi_quotes,具体取决于默认配置:

SET sql_mode = 'ANSI_QUOTES';


反引号`仅在MySQL中使用,您将学到无法在任何其他品牌的SQL中使用的SQL类型DBMS。

#3 楼

这意味着表名称中可以有空格。当然,并不是特别吸引人。与SQL Server的[]相同。

#4 楼

如果您有保留名称的列,这可能会有所帮助,例如:
您可以查询如下语句:

select * from tablename group by `group`;


#5 楼

从我的角度来看,@ Mr.Brownstone答案仅部分正确。

MySQL中使用反引号`来分隔表示标识符(而不是字符串)的文字。

这使您可以使用通常不接受的字符(例如空格,保留字等)作为标识符。例如:

SELECT * FROM `Strange table name`;


还重要的是,它还允许解析器知道您是否在做错误的事情,例如选择不存在的列。例如:

SELECT notexistingcolumn FROM atable;


如果存在atablenotexistingcolumn列不存在,它将被解释为文字字符串“ notexistingcolumn”,将其选择为值(并且可能会发出警告)。相反,如果您使用:

SELECT `notexistingcolumn` FROM `atable`;


它将认识到notexistingcolumn是不包含以下内容的列的名称存在并引发错误。

我总是希望用反引号将标识符括起来,包括别名,并尽量避免使用保留字和奇怪的字符作为标识符。

在https://dev.mysql.com/doc/refman/8.0/zh-CN/identifiers.html上了解有关MySQL反引号的更多信息。