MySQL INSERT - 字段名称需要反引号/重音分隔吗?

时间:2011-09-12 23:06:10

标签: php mysql

我对MySQL有点新手(来自MS SQL),并且在尝试将值插入数据库时​​最近遇到了一些让我感到困惑的事情。

我通过PHP创建了一个INSERT SQL命令,但发现它在尝试执行时发生错误。

INSERT INTO myTableName (first-name, last-name) VALUES ('Ted', 'Johnson')

以我的方式思考上面的字符串应该有效..但事实并非如此。我甚至尝试在phpMyAdmin中直接使用它,但我得到了相同的语法错误。

唯一能使它工作的是我在SQL语句中用“反引号”或“重音”字符(键盘上波形符号键上的另一个字符)包围字段名称。例如......

INSERT INTO myTableName(`first-name`, `last-name`) VALUES ('Ted', 'Johnson')

我从未在MySQL或MS SQL Server中知道这是必要的。我总是只列出字段名称而不分隔它们。以前有人碰过这个吗?我使用的是MySQL 5.0.77。谢谢。

3 个答案:

答案 0 :(得分:6)

您的列名称包含连字符,这通常不是一个好主意,因为解析器可能会误解为first minus name。反向标记是引用列名称的MySQL方法,以确保它们得到正确处理。

如果您的列是first_name和last_name,则不需要后退。

答案 1 :(得分:5)

如果您的列名与SQL保留字或符号冲突,则只需要反引号。在您的情况下,将firstname(以及lastname之间的那个)分隔的短划线被解释为减号。此外,MySQL's ALTER TABLE statement中使用了first这个词(虽然它实际上没有出现在MySQL's reserved words list中)。如果您可以使用下划线而不是短划线重命名列来分隔单词,则不需要反引号。

答案 2 :(得分:1)

好吧,即使SO语法高亮显示器在你的第一个代码语句中显示last为蓝色(一个小小的笑话)。我不是MYSQL专家,但我总是使用反引号,因为我想要为自己编程以便始终使用它们。如果你自然地使用反引号,你可以在将来避免很多问题。我也会反击你的桌子:

mysql_query("INSERT INTO `myTableName` (`first-name`, `last-name`) VALUES ('Ted', 'Johnson')");