我尝试了许多不同的方法来创建带有外键的表,并尝试插入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数据库中。我得到这个错误:
无法添加外键约束
我该怎么修?
我们在评论中发现,如果主键是这样定义的:
user_id BIGINT(10) UNSIGNED
那么像这样的外键将不起作用,因为它需要在签名性上匹配(我认为类型也是):
user_id INT(10) NOT NULL
这很好:
user_id BIGINT(10) UNSIGNED NOT NULL
这里有一个Fiddle来演示它的工作原理。