外键约束错误

时间:2020-07-21 17:12:08

标签: mysql sql foreign-keys primary-key

我正在制作商店网站,所以我试图制作一张既有我的卖出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)桌子

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

这是我要制作的桌子

    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_has_compra(错误编号150“外键约束格式不正确”)

1 个答案:

答案 0 :(得分:1)

在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
);

然后,您可以使用现有代码创建子表并添加约束。

Demo on DB Fiddle