我在检查一个编码作业,遇到了一个无法解决的错误。
我创建了一个数据库,并尝试向其中插入表:
CREATE TABLE city(
city_id INT NOT NULL,
city_name VARCHAR(50) NOT NULL,
state VARCHAR(20),
zip CHAR(10) NOT NULL,
country VARCHAR(60) NOT NULL,
PRIMARY KEY (city_id)
);
CREATE TABLE users(
user_id INT NOT NULL,
first_name VARCHAR(25) NOT NULL,
last_name VARCHAR(25) NOT NULL,
city VARCHAR(50),
state VARCHAR(20),
zip_code CHAR(10),
country VARCHAR(60),
phone VARCHAR(12),
email VARCHAR(30) NOT NULL,
user_password VARCHAR(25) NOT NULL,
PRIMARY KEY (user_id),
FOREIGN KEY(city) REFERENCES city(city_name),
FOREIGN KEY(state) REFERENCES city(state),
FOREIGN KEY(zip_code) REFERENCES city(zip),
FOREIGN KEY(country) REFERENCES city(country)
);
然后我得到这个错误:错误1822无法添加外键约束。在引用的表“city”中缺少约束“users_ibfk_1”的索引
我试着调整我的空值来对齐,但还是失败了
2条答案
按热度按时间42fyovps1#
你的方法是错误的,你的错误是因为你没有引用列的索引,但这不是真实的的问题所在。
您的潜在错误是将City表中的信息复制到Users表中。这显然是数据可能变得不一致的地方。
相反,只需将
city_id
存储在Users表中,并使用外键引用city表。删除重复的列,并在需要时使用JOIN检索数据。这样的JOIN:
结果:
| 名|姓|城市名称|
| - ------|- ------|- ------|
| 约翰|母鹿|维也纳|
View on DB Fiddle
rpppsulh2#
它通常指示您尝试添加到表中的外键约束条件存在问题。错误消息可能提供有关导致问题的特定约束条件的附加信息。