外键约束给出错误

eiee3dmh  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(446)

我正在做一个网上商店,所以我想做一个表,既有我的销售 table(Compra) 还有我的衬衫 (camisolas) table .
这是我的销售台

CREATE TABLE `compra` (
  `idCompra` int(11) NOT NULL,
  `dataCompra` datetime DEFAULT NULL,
  `valorTotal` varchar(50) DEFAULT NULL,
  `utilizador_idUser` int(11) NOT NULL
);

这是我的衬衫(camisolas)table

CREATE TABLE `camisolas` (
  `idCam` int(11) NOT NULL,
  `nome` varchar(100) NOT NULL,
  `preco` float NOT NULL,
  `camisola_imagem` varchar(150) NOT NULL
);

这就是我要做的table

create table user_has_compra(
idCompra1 int primary key auto_increment,
idBuy int(11),
idCamisola int(11),
quantidade int(10)
);
ALTER TABLE `user_has_compra`
  ADD CONSTRAINT `fk_compra_camisola` FOREIGN KEY (`idCamisola`) REFERENCES `camisolas` (`idCam`),
  ADD CONSTRAINT `fk_compra_compra` FOREIGN KEY (`idBuy`) REFERENCES `compra` (`idCompra`)
;

这就是约束´我正在努力,谢谢你的帮助。
我得到的错误是

1005您无法创建表loja.user\u has\u compra(错误号150“外键约束格式不正确”)

iovurdzv

iovurdzv1#

在mysql中,外键的父列需要索引,因此可以高效地进行查找。
在您的架构中,两个父表都缺少一个主键,因此您不能在子表中引用它们。
我想你想要:

CREATE TABLE `compra` (
  `idCompra` int(11) NOT NULL PRIMARY KEY,  --> primary key constraint
  `dataCompra` datetime DEFAULT NULL,
  `valorTotal` varchar(50) DEFAULT NULL,
  `utilizador_idUser` int(11) NOT NULL
);

CREATE TABLE `camisolas` (
  `idCam` int(11) NOT NULL PRIMARY KEY,    --> primary key constraint
  `nome` varchar(100) NOT NULL,
  `preco` float NOT NULL,
  `camisola_imagem` varchar(150) NOT NULL
);

然后可以使用现有代码创建子表并添加约束。
db小提琴演示

相关问题