错误1822 MySql缺少约束的索引

时间:2019-12-03 06:22:05

标签: mysql

我知道这个问题被问了200万次,但是我碰到要盯着这个东西好几个小时而又不知道会产生什么作用的点。

DROP TABLE IF EXISTS `Branch`;
CREATE TABLE `Branch` (
`BranchID` int(11) NOT NULL,
`SKU` INT NOT NULL,
`BranchName` tinytext NOT NULL,
PRIMARY KEY (BranchID, SKU)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `Items`;
CREATE TABLE `Items` (
`SKU` INT NOT NULL,
`Name` VARCHAR(100) NOT NULL,
`Price` float,
`Quantity` INT,
`BranchID` int(11) NOT NULL,
PRIMARY KEY (SKU),
FOREIGN KEY (SKU) REFERENCES Branch(SKU),
foreign key (BranchID) REFERENCES Branch(BranchID)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

无论出于什么原因,我都收到1822错误,但我根本看不出错误的根源(可能是愚蠢的)。我将它们按在mysql中创建的顺序放置。

2 个答案:

答案 0 :(得分:1)

先将items放到branch之前。因为它具有表Branch的外键。

DROP TABLE IF EXISTS `Items`;
DROP TABLE IF EXISTS `Branch`;
CREATE TABLE `Branch` (
`BranchID` int(11) NOT NULL,
`SKU` INT NOT NULL,
`BranchName` tinytext NOT NULL,
PRIMARY KEY (BranchID, SKU)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `Items` (
`SKU` INT NOT NULL,
`Name` VARCHAR(100) NOT NULL,
`Price` float,
`Quantity` INT,
`BranchID` int(11) NOT NULL,
PRIMARY KEY (SKU),
FOREIGN KEY (SKU) REFERENCES Branch(SKU),
foreign key (BranchID) REFERENCES Branch(BranchID)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

答案 1 :(得分:0)

'InnoDB允许外键引用任何索引列或一组列。但是,在被引用的表中,必须有一个索引,其中被引用的列是相同顺序的https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html分支的第一列。sku不满足此要求。