繁体   English   中英

使用phpmyadmin的mysql外键

[英]mysql foreign key using 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中实现外键。

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)
);

每当在查询中引用它时,您都必须记住将其放在反引号中。 如果您只是为表选择其他名称,则可以避免麻烦。

这也将帮助您:

如果您问我,应始终使用反引号。 但是,出于某些原因,团队可能更喜欢不使用它们。

好处:

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

缺点:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM