gpt4 book ai didi

mysql - 无法在简单代码上添加外键约束请帮忙

转载 作者:行者123 更新时间:2023-11-30 00:03:24 25 4
gpt4 key购买 nike

我正在尝试一些看似简单的事情,但我一直遇到相同的错误“无法添加外键约束”,有人可以帮助我吗?我正在使用带有 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;

最佳答案

我很确定您正在尝试将外键 约束添加到错误的表中。据推测 table2 包含 table1 引用的类型。

您必须重新排序代码,id_kind 可能应该是 table2主键,并且您需要 上的索引table1 中的 >id_kind:

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;

更新

现在看起来您想要一个复合外键,请为您的 table1 尝试此操作:

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的同义词)行在表中设置一个INDEXFOREIGN KEY 使用。

FOREIGN KEY docs

关于mysql - 无法在简单代码上添加外键约束请帮忙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24823473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com