首页 > 解决方案 > 错误 1822 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 中创建的顺序排列。

标签: mysql

解决方案


把你的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;

推荐阅读