【发布时间】:2015-04-09 18:43:37
【问题描述】:
我尝试了许多不同的方法来使用外键创建表并尝试插入到 phpMyAdmin。但是,它并没有像我预期的那样工作。
这是我到目前为止所做的:
CREATE TABLE user (
user_id BIGINT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_name VARCHAR(50) NOT NULL,
user_password VARCHAR(50) NOT NULL);
这工作得很好。但是,如果我尝试添加一个带有外键的表,它会拒绝创建:
CREATE TABLE article (
article_id INT(20) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
article_title VARCHAR(100) NOT NULL,
article_content VARCHAR(1000) NOT NULL,
user_id INT(10) NOT NULL,
FOREIGN KEY (user_id) REFERENCES user (user_id));
这不会按预期工作,并且不会将表添加到 MySQL 数据库。我收到此错误:
不能添加外键约束
我该如何解决?
【问题讨论】:
-
如果你输入第二个查询会发生什么?你有错误吗?如果是这样,你会得到什么错误? (这两个查询似乎都有一个尾随双引号,这会导致语法错误。如果您将其添加到 phpMyAdmin,则将其删除 - 这可能是您的问题)。
-
为什么使用
INT(20)而不是BIGINT(20)。还有为什么VARCHAR(1000)而不仅仅是TEXT或BLOB数据类型? -
啊!您的
article表缺少user_id的定义 - 您需要在声明FOREIGN KEY之前明确定义它。 -
好吧,也许这就是问题所在。 @halfer 你能举例说明 user_id 的定义吗?
-
只需要在FK上面添加一个定义,比如
user_id BIGINT(20) NOT NULL,,这样它就可以匹配另一个表中主键的定义。
标签: php mysql database phpmyadmin