0

我无法在 phpmyadmin 中创建外键。我使用以下查询创建了 2 个表。创建了第一个表,但是当我使用第二个查询时,我得到了错误

#1064 - 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 'order ( Orderid INT NOT NULL, cost INT, CustId INT NOT NULL, PRIMARY KEY(Or' at line 1

这是我的第一张桌子:

CREATE TABLE customer
(
  CustId INT NOT NULL,
  first_name VARCHAR(30),
  PRIMARY KEY (CustId)
);

这是我的第二张桌子:

CREATE TABLE order
(
 Orderid INT NOT NULL,
 cost INT,
 CustId INT NOT NULL,
 PRIMARY KEY(Orderid),
 INDEX (CustId),
 FOREIGN KEY (CustId) REFERENCES customer (CustId)
);

那么我在这里做错了什么?我如何创建这些表并在 phpmyadmin 中实现外键。

4

2 回答 2

1

order是 MySQL 的保留字(在ORDER BY子句中使用),如果要将其用作表或列的名称,则必须将其括在反引号中。

CREATE TABLE `order`
(
 Orderid INT NOT NULL,
 cost INT,
 CustId INT NOT NULL,
 PRIMARY KEY(Orderid),
 INDEX (CustId),
 FOREIGN KEY (CustId) REFERENCES customer (CustId)
);

每当您在查询中引用它时,您必须记住将它放在反引号中。如果您只是为表选择一个不同的名称,您会省去很多麻烦。

于 2013-07-19T04:40:12.413 回答
0

这也将帮助您:

如果你问我,应该总是使用反引号。但是有一些原因可能会导致团队不愿意使用它们。

好处:

  • 使用它们,没有保留字或禁止字符。
  • 在某些情况下,您会收到更具描述性的错误消息。
  • 如果您避免了您不在乎的不良做法,但是...实际上,有时它们是避免 SQL 注入的一种不错的方法。

缺点:

  • 它们不是标准的,通常不可移植。但是,只要您不使用反引号作为标识符的一部分(这是我能想象到的最糟糕的做法),您就可以通过自动删除反引号来移植您的查询。
  • 如果您的某些查询来自 Access,他们可能会用 " 引用表名(也许您不能盲目地删除所有 " )。但是,允许混合使用反引号和双引号。
  • 一些愚蠢的软件或功能会过滤您的查询,并且存在反引号问题。但是,它们是 ASCII 的一部分,因此这意味着您的软件/功能非常糟糕。

参考:http ://dev.mysql.com/doc/refman/5.0/en/identifiers.html

于 2013-07-19T05:23:23.753 回答