Я прочитал MySQL документы и не могу найти решение этой проблемы. Другие вопросы StackOverFlow не решают мою проблему.
У меня есть MySQL база данных с 3 таблицами в рамках этой проблемы. appointments
, services
и appointment_services
, где appointments
и services
имеют отношение «многие ко многим», связанное через appointment_services
.
CREATE TABLE `appointment_services` (
`appointmentid` int(11) NOT NULL,
`serviceid` int(11) NOT NULL,
KEY `appointment_fk_idx` (`appointmentid`),
KEY `service_fk` (`serviceid`),
CONSTRAINT `appointment_fk` FOREIGN KEY (`appointmentid`) REFERENCES `appointments` (`appointmentid`),
CONSTRAINT `service_fk` FOREIGN KEY (`serviceid`) REFERENCES `services` (`serviceid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
CREATE TABLE `appointments` (
`appointmentid` int(11) NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
PRIMARY KEY (`appointmentid`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8
CREATE TABLE `services` (
`serviceid` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
`description` mediumtext,
`parentid` int(11) DEFAULT NULL,
`session_duration` int(11) NOT NULL,
PRIMARY KEY (`serviceid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
services
уже содержит несколько строк, в том числе одну с serviceid = 1
.
Когда я пытаюсь выполнить следующий запрос с использованием транзакции, я получаю сообщение об ошибке, указывающее, что нарушаю ограничение внешнего ключа в appointment_services
:
13:19:18 INSERT INTO `appointment_services` (appointmentid, serviceid) VALUES (1,1) Error Code: 1216. Cannot add or update a child row: a foreign key constraint fails 0.234 sec
BEGIN WORK;
INSERT INTO `appointments`
(appointmentid, date) VALUES (1, 2020/01/04);
INSERT INTO `appointment_services`
(appointmentid, serviceid) VALUES (1,1);
COMMIT;
Я столкнулся с решениями, в которых говорится, что я должен установить ограничения для deffered, однако это не поддерживается в MySQL.