添加外键约束失败

时间:2019-07-29 10:50:40

标签: mysql foreign-keys

我尝试在表上添加外键,但是每当尝试尝试时,我总是会遇到此错误

  

错误1822(HY000):无法添加外键约束。引用表“ all_votes”中约束“ total_ibfk_1”的缺少索引

正在创建的表就是这个表(成员是与该错误无关的另一个表,因此不要重视它)

CREATE TABLE IF NOT EXISTS all_votes ( 
id_vote INT AUTO_INCREMENT PRIMARY KEY,
id_member INT,
name_member VARCHAR(20),
vote VARCHAR(20) NOT NULL,
type_of_vote VARCHAR(10) NOT NULL,
topic VARCHAR(20) NOT NULL,
FOREIGN KEY (id_member) REFERENCES members(id)
);

这是发生错误的表

CREATE TABLE IF NOT EXISTS total ( 
topic VARCHAR(20) PRIMARY KEY, 
type_of_vote VARCHAR(10) NOT NULL, 
counts INT NOT NULL, 
FOREIGN KEY (topic) REFERENCES all_votes(topic)
);

我读了很多答案,但是似乎没有一个对我有用。 This answer是最有启发性的,总结的要少得多。

我猜想错误与外键对非主键的引用有关。问题是,很多人说这是可能的,但是我没有找到一个单独的代码示例,所以我很可能把那里弄乱了。

2 个答案:

答案 0 :(得分:0)

'MySQL需要在外键和引用键上建立索引'https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html,mysql将在引用表中为您生成键,但是您必须在引用表中对其进行定义。换句话说,您需要在all_votes中添加有关主题的键。

此语法

CREATE TABLE IF NOT EXISTS all_votes ( 
id_vote INT AUTO_INCREMENT PRIMARY KEY,
id_member INT,
name_member VARCHAR(20),
vote VARCHAR(20) NOT NULL,
type_of_vote VARCHAR(10) NOT NULL,
topic VARCHAR(20) NOT NULL #,
#FOREIGN KEY (id_member) REFERENCES members(id)
);

alter table all_votes
    add key abk1(topic); 

CREATE TABLE IF NOT EXISTS total ( 
topic VARCHAR(20) PRIMARY KEY, 
type_of_vote VARCHAR(10) NOT NULL, 
counts INT NOT NULL,
FOREIGN KEY (topic) REFERENCES all_votes(topic)
    );

注意:我已注释掉#FOREIGN KEY(id_member)参考成员(id)

答案 1 :(得分:0)

因为all_votes.topic列应定义为PRIMARY OR UNIQUE KEY,以便能够为total.topic列定义引用的外键。