我尝试在表上添加外键,但是每当尝试尝试时,我总是会遇到此错误
错误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是最有启发性的,总结的要少得多。
我猜想错误与外键对非主键的引用有关。问题是,很多人说这是可能的,但是我没有找到一个单独的代码示例,所以我很可能把那里弄乱了。
答案 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
列定义引用的外键。