尝试将多个外键添加到单个 table 时出错
Error while trying to add multiple foreign keys to single table
我正在尝试创建一个 child table 来限制来自 parent 的 3 个外键,但我收到错误消息 1215:无法添加外键约束
parent table:
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
child table(由于上述错误我无法构建):
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)
);
请告诉我哪里做错了...谢谢大家。
当您使用复合主键(即多列键)为 table 创建外键时,您也应该创建外键复合。
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)
)
您尝试做的是创建三个单独的约束。
虽然现在我有一个新问题,试图向上面的子 table 添加一行,但我收到错误 1452:无法添加或更新子行。
这是我在父项中的行 Table:
time_of_day | day_of_week |电子邮件
'Evening' 'monday' 'elinor@gmail.com'
但是在尝试向 TEST1(子 table)添加一行时我收到错误 1452 - 无法添加或更新子行:
insert into TEST1 (num_request, time_of_day, day_of_week, email)
Values (1, 'Evening', 'monday', 'elinor@gmail.com')
我不明白我错过了什么,
我在父 table 中确实有这些行,输入的类型是相同的...
我正在尝试创建一个 child table 来限制来自 parent 的 3 个外键,但我收到错误消息 1215:无法添加外键约束
parent table:
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
child table(由于上述错误我无法构建):
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)
);
请告诉我哪里做错了...谢谢大家。
当您使用复合主键(即多列键)为 table 创建外键时,您也应该创建外键复合。
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)
)
您尝试做的是创建三个单独的约束。
虽然现在我有一个新问题,试图向上面的子 table 添加一行,但我收到错误 1452:无法添加或更新子行。
这是我在父项中的行 Table:
time_of_day | day_of_week |电子邮件
'Evening' 'monday' 'elinor@gmail.com'
但是在尝试向 TEST1(子 table)添加一行时我收到错误 1452 - 无法添加或更新子行:
insert into TEST1 (num_request, time_of_day, day_of_week, email)
Values (1, 'Evening', 'monday', 'elinor@gmail.com')
我不明白我错过了什么, 我在父 table 中确实有这些行,输入的类型是相同的...