MySQL Внешний ключ внутри транзакции нарушен - PullRequest
0 голосов
/ 20 апреля 2020

Я прочитал 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.

1 Ответ

0 голосов
/ 20 апреля 2020

Я думаю, что ваш первый запрос здесь потерпел неудачу, поскольку у вас есть дата в неправильном формате.

Во-первых, он должен быть в кавычках, а во-вторых, формат должен быть yyyy-mm-dd

BEGIN WORK;
INSERT INTO `appointments`
(`appointmentid`, `date`) VALUES (1, '2020-04-01');

INSERT INTO `appointment_services`
(`appointmentid`, `serviceid`) VALUES (1,1);
COMMIT;

PS: я предположил, что дата должна была быть 1 апреля 2020 года, а не 4 января 2020 года:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...