为什么把`围绕着?

时间:2010-07-16 07:11:28

标签: mysql

在某些代码中,我看到人们把`放在他们的专栏周围。为什么?与不使用它们有什么区别吗?

SELECT `players`.`name`, `houses`.`id` FROM `players`, `houses` 
WHERE `houses`.`owner` = `players`.`id`

3 个答案:

答案 0 :(得分:19)

使用反引号可以将保留字用作列名或表名,例如

SELECT `values` FROM `references` WHERE `precision` > 0

并且带有非字母数字的名称也必须包含在“`”之间,例如。

SELECT `user name` FROM `registered users` WHERE `total score` > 0

有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.1/en/identifiers.html


我认为在动态使用这些名称时经常会出现这种情况,例如: (人为的例子)

mysql_prepare_statement("SELECT `%q` FROM `%q` WHERE `%q` > 0", col, tbl, col_cond);

在这种形式下,任何类型的列和表名都可以相同地处理,并且可以避免恶意注入尝试,例如col = "1; DROP TABLE users--"

答案 1 :(得分:3)

某些列名可能是MySQL中的保留字。在这种情况下,你可以用`引用它们。为了保持一致性和面向未来,一些开发人员引用了所有标识符。

答案 2 :(得分:1)

以这种方式使用的反引号的常用术语是“标识符引号”。它们用于包含模式对象的名称(表,列,过程,触发器等)。使用它们是因为它们允许其他非法字符(空格,标点字符等)和SQL保留字出现在对象名称内(或作为整体)。

为此目的使用反引号是特定于MySQL的。在ANSI的ANSI标准中,标识符应该用双引号"括起来。默认情况下,MySQL将"视为字符串分隔符,但如果将SQL模式设置为包含ANSI_QUOTES,则会将"视为替代标识符引号(反引号仍然有效) )。其他RDBMS也有专有的标识符字符;例如,SQL Server允许您使用[...]以及"..."