为什么我的CREATE TABLE语句不会在没有反引号的情况下运行?

时间:2014-03-09 20:36:45

标签: mysql sql database

此查询运行:

MariaDB > CREATE TABLE `lines` (`line_id` INT UNSIGNED AUTO_INCREMENT,
    -> `page_id` int(10) UNSIGNED NOT NULL,
    -> `file_name` varchar(150) NOT NULL,
    -> `position` varchar(20) NOT NULL,
    -> PRIMARY KEY(line_id),
    -> FOREIGN KEY(page_id) REFERENCES pages(page_id)
    ->     ON DELETE CASCADE
    -> )AUTO_INCREMENT=100;
Query OK, 0 rows affected (0.01 sec)

此查询未运行:

    MariaDB > CREATE TABLE lines (line_id INT UNSIGNED AUTO_INCREMENT,
    -> page_id int(10) UNSIGNED NOT NULL,
    -> file_name varchar(150) NOT NULL,
    -> position varchar(20) NOT NULL,
    -> PRIMARY KEY(line_id),
    -> FOREIGN KEY(page_id) REFERENCES pages(page_id)
    ->     ON DELETE CASCADE
    -> )AUTO_INCREMENT=100; 
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that          corresponds to your MySQL server version for the right syntax to use near 'lines (line_id INT AUTO_INCREMENT,
page_id int(10) UNSIGNED NOT NULL,
file_name ' at line 1

除了反引号之外,它是相同的查询。我很确定这些字段名称都不是SQL关键字,所以我很困惑为什么没有反引号它就不会执行。

我可以使用反引号,但我宁愿不使用它们,因为我不想将它们用于我将来在此表上运行的每个查询。我还希望语法在数据库中保持一致;在同一个数据库中还有其他表不需要使用反引号来对它们运行查询。

感谢您提供任何帮助/建议。

1 个答案:

答案 0 :(得分:2)

lines是MySQL中的保留字。这就是为什么我们首先有反击。不使用它们就像不在PHP中使用引号而只依赖于未定义的常量。