使用phpmyadmin的mysql外键

时间:2013-07-19 04:33:13

标签: mysql phpmyadmin

我无法在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中实现外键。

2 个答案:

答案 0 :(得分: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)
);

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

答案 1 :(得分:0)

这也可以帮到你:

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

优点:

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

缺点:

  • 它们不是标准的,通常不便携。但是,只要 你不使用反引号作为标识符的一部分(这是最糟糕的 练习我能够想象),你可以移植你的查询 自动删除反引号。
  • 如果您的某些查询来自Access,则可能会引用表名称 用“(也许你不能盲目地删除所有”)。然而, 允许使用反引号和双引号的混合物。
  • 一些愚蠢的软件或功能会过滤您的查询,并且具有 反叛问题。但是,它们是ASCII的一部分所以这个 意味着你的软件/功能非常糟糕。

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