mysql SQL错误1822无法添加外键约束

o4hqfura  于 2023-03-22  发布在  Mysql
关注(0)|答案(2)|浏览(270)

我在检查一个编码作业,遇到了一个无法解决的错误。
我创建了一个数据库,并尝试向其中插入表:

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”的索引
我试着调整我的空值来对齐,但还是失败了

42fyovps

42fyovps1#

你的方法是错误的,你的错误是因为你没有引用列的索引,但这不是真实的的问题所在。
您的潜在错误是将City表中的信息复制到Users表中。这显然是数据可能变得不一致的地方。
相反,只需将city_id存储在Users表中,并使用外键引用city表。删除重复的列,并在需要时使用JOIN检索数据。

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_id INT,
phone VARCHAR(12),
email VARCHAR(30) NOT NULL,
user_password VARCHAR(25) NOT NULL,
PRIMARY KEY (user_id),
FOREIGN KEY(city_id) REFERENCES city(city_id)
);
Insert city (city_id,city_name, zip, country) values (1,'Vienna','90210','Austria'),(2,'Caracas','cx3045','Venezuela');
Insert users (user_id, first_name, last_name, email, city_id,user_password) values(1,'John','Doe','j.doe@example.com',1,'HashedPassword');

这样的JOIN:

select users.first_name, users.last_name, city.city_name from users JOIN city using(city_id);

结果:
| 名|姓|城市名称|
| - ------|- ------|- ------|
| 约翰|母鹿|维也纳|
View on DB Fiddle

rpppsulh

rpppsulh2#

它通常指示您尝试添加到表中的外键约束条件存在问题。错误消息可能提供有关导致问题的特定约束条件的附加信息。

相关问题