请不要在简单的代码帮助上添加外键约束

时间:2014-07-18 11:01:13

标签: mysql sql foreign-keys

我正在尝试一些看似简单的东西,但我只是一直有同样的错误“无法添加外键约束”,任何人都可以帮助我吗?我正在使用带有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;

1 个答案:

答案 0 :(得分:0)

我很确定您要将foreign key constraint添加到错误的表格中。 据推测,table2包含table1引用的种类。

您必须重新排序代码,id_kind可能应该是primary key的{​​{1}},并且您需要table2id_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

FOREIGN KEY docs