在MySQL查询中使用反引号(`)的好处?


25

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

  1. SELECT * FROM TEST;
  2. SELECT * FROM `TEST`;

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

它们之间有技术上的区别吗?

`相对于简单查询,使用()有什么好处?

Answers:


32

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

CREATE TABLE my table (id INT);

但是以下内容将:

CREATE TABLE `my table` (id INT);

另外,以下内容也会出错,因为COUNT它是保留关键字:

SELECT count FROM some_table

但是以下内容将被正确解析:

SELECT `count` FROM some_table

我希望这可以帮助你。


24

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

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

SET sql_mode = 'ANSI_QUOTES';

反引号`仅在MySQL中使用,您会学到一种SQL类型的SQL,它在其他任何品牌的DBMS中均不起作用。


6

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


3

如果您有一个保留名称的列,这可能会有所帮助,

例如:您可以查询如下语句:

select * from tablename group by `group`;

1

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

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

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

SELECT * FROM `Strange table name`;

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

SELECT notexistingcolumn FROM atable;

如果atable存在但notexistingcolumn列不存在,则将其解释为文字字符串“ notexistingcolumn”,将其选择为值(并且可能会发出警告)。

相反,如果您使用:

SELECT `notexistingcolumn` FROM `atable`;

它将识别出这notexistingcolumn是不存在的列的名称并引发错误。

我认为始终最好在标识符前后加上引号,包括别名,并尽量避免使用保留字和奇怪的字符作为标识符。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.