错误代码:1822。无法添加外键约束。引用表“ resident”中约束“ officials_ibfk_1”的缺少索引]
我创建了一个具有两个相互关联的子类表的超类表。为什么会发生此错误?我不能为不是另一个表的主表的表分配外键吗?
CREATE TABLE User (
`userid` int NOT NULL AUTO_INCREMENT,
`username` varchar(30) NOT NULL UNIQUE,
`password` varchar(30) NOT NULL,
`emailaddress` varchar(50) NOT NULL UNIQUE,
`lastname` varchar(20),
`firstname` varchar(20),
`birthday` date,
`sex` varchar(7) CHECK (sex IN ('Male', 'Female')),
`address` varchar(100),
`billingproof` varchar(100),
PRIMARY KEY (userid)
);
CREATE TABLE Resident (
`residentid` int NOT NULL,
`userid` int,
`groupid` int,
`accntstatus` VARCHAR(13) CHECK (accntstatus IN ('Approved', 'For Approval', 'Disapproved')),
`residenttype` VARCHAR(40) CHECK (residenttype IN ('Individual Resource', 'Service Provider', 'Individual Resource and Service Provider')),
`householdid` INT,
`elected` boolean,
FOREIGN KEY (userid) REFERENCES User(userid)
);
CREATE TABLE Officials (
`electedid` int NOT NULL,
`userid` int,
`position` varchar(15) CHECK (position IN ('Staff', 'Village Officer')),
`isSystemAdmin` boolean,
`startDate` date,
`endDate` date,
`residentid` int,
FOREIGN KEY (residentid) REFERENCES Resident(residentid),
FOREIGN KEY (userid) REFERENCES User(userid)
);
在MySql中,不必一定要引用的键是主键,但必须通过索引确保它是唯一的(请参见MySql document on foreign key constraints):
MySQL需要在外键和参考键]上建立索引,这样外键检查可以快速进行,而无需进行表扫描。
为了解决它,请更改:
`residentid` int NOT NULL,
至:
`residentid` int NOT NULL UNIQUE,
[FOREIGN KEY是用于将两个表链接在一起的键。