此查询运行:
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关键字,所以我很困惑为什么没有反引号它就不会执行。
我可以使用反引号,但我宁愿不使用它们,因为我不想将它们用于我将来在此表上运行的每个查询。我还希望语法在数据库中保持一致;在同一个数据库中还有其他表不需要使用反引号来对它们运行查询。
感谢您提供任何帮助/建议。
答案 0 :(得分:2)
lines
是MySQL中的保留字。这就是为什么我们首先有反击。不使用它们就像不在PHP中使用引号而只依赖于未定义的常量。