我正在尝试创建一个约束来自父表的 3 个外键的子表,但收到错误1215:无法添加外键约束
父表:
CREATE TABLE `Availability` (
`time_of_day` varchar(20) NOT NULL,
`day_of_week` varchar(20) NOT NULL,
`email` varchar(60) NOT NULL,
PRIMARY KEY (`time_of_day`,`day_of_week`,`email`),
KEY `email` (`email`),
CONSTRAINT `Availability_ibfk_1` FOREIGN KEY (`email`) REFERENCES `service_provider` (`email_service_provider`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
子表(由于上述错误我无法构建):
CREATE TABLE TEST1
(
num_request INT NOT NULL,
time_of_day VARCHAR(20) NOT NULL,
day_of_week VARCHAR(20) NOT NULL,
email VARCHAR(60) NOT NULL,
PRIMARY KEY (num_request),
Foreign key (time_of_day) references Availability(time_of_day),
Foreign key (day_of_week) references Availability(day_of_week),
Foreign key (email) references Availability(email)
);
请告诉我我做错了什么......谢谢大家。
最佳答案
当您为具有复合主键(即多列的键)的表创建外键时,您也应该创建复合外键。
CREATE TABLE TEST1
(
num_request INT NOT NULL,
time_of_day VARCHAR(20) NOT NULL,
day_of_week VARCHAR(20) NOT NULL,
email VARCHAR(60) NOT NULL,
PRIMARY KEY (num_request),
Foreign key (time_of_day, day_of_week, email) references Availability(time_of_day, day_of_week, email)
)
外键的列应与其引用的主键或唯一键的列相匹配。它们应该具有相同的列数和相同的顺序。
您尝试做的是创建三个单独的约束,每个约束各一列。
关于mysql - 尝试将多个外键添加到单个表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70407351/