我正在尝试一些看似简单的东西,但我只是一直有同样的错误“无法添加外键约束”,任何人都可以帮助我吗?我正在使用带有sql的工作台
drop table if exists table2;
create table if not exists table2(
id_kind int not null,
id_bod int not null,
id_doc int not null,
primary key (id_kind, id_bod, id_doc)
)engine=InnoDB default charset=latin1;
drop table if exists table1;
create table if not exists table1(
id_mov int not null,
id_kind int not null,
id_prod int,
id_bod int not null,
id_doc int not null,
primary key (id_mov),
key id_kind (id_kind),
key id_bod (id_bod),
key id_doc (id_doc),
foreign key table1 (id_kind) references table2 (id_kind),
foreign key table1 (id_bod) references table2 (id_bod),
foreign key table1 (id_doc) references table2 (id_doc)
)engine=InnoDB default charset=latin1;
答案 0 :(得分:0)
我很确定您要将foreign key
constraint
添加到错误的表格中。
据推测,table2
包含table1
引用的种类。
您必须重新排序代码,id_kind
可能应该是primary key
的{{1}},并且您需要table2
中id_kind
的索引}:
table1
<强>更新强>
现在看起来你想要一个复合外键,试试table1:
drop table if exists table2;
create table if not exists tabla2(
id_kind int not null,
primary key (id_kind)
)engine=InnoDB default charset=latin1;
drop table if exists table1;
create table if not exists table1(
id_mov int not null,
id_kind int not null,
id_prod int,
primary key (id_mov),
key id_kind (id_kind),
foreign key table1_ibfk_1 (id_kind) references table2 (id_kind)
)engine=InnoDB default charset=latin1;
我还不确定这些表中的每一个代表什么,或者你想要实现的目标。
您使用drop table if exists table1;
create table if not exists table1(
id_mov int not null,
id_kind int not null,
id_prod int,
id_bod int not null,
id_doc int not null,
primary key (id_mov),
key id_kind_id_bod_id_doc (id_kind, id_bod, id_doc),
foreign key table1_ibfk_1 (id_kind, id_boc, id_doc)
references table2 (id_kind, id_boc, id_doc),
)engine=InnoDB default charset=latin1;
(KEY
的同义词)行在您的表格中设置INDEX
使用的INDEX
。