@evgeniy1982

Как решить эту проблему Cannot add or update a child row: a foreign key constraint fails?

Создал Java проэкт который работает с базой данных в MySql через JDBC. У меня есть такие таблицы:

CREATE TABLE `brand` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin

CREATE TABLE `category` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `discount` int DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin

CREATE TABLE `producttype` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin

CREATE TABLE `product` (
  `id` int NOT NULL AUTO_INCREMENT,
  `brandId` int NOT NULL,
  `categoryId` int NOT NULL,
  `productTypeId` int NOT NULL,
  `price` double(10,2) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `brandId_idx` (`brandId`),
  KEY `categoryId_idx` (`categoryId`),
  KEY `prodoctTypeId_idx` (`productTypeId`),
  CONSTRAINT `brandId` FOREIGN KEY (`brandId`) REFERENCES `brand` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `categoryId` FOREIGN KEY (`categoryId`) REFERENCES `category` (`id`),
  CONSTRAINT `productTypeId` FOREIGN KEY (`productTypeId`) REFERENCES `producttype` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin

Я создал консольное Java приложение для работы с БД через Jdbc. В таблицы Brand, Category и productType данные вставились через Java без проблем, но когда я пытаюсь вставить данные в таблицу Product, то выдает такую ошибку:

Cannot add or update a child row: a foreign key constraint fails (`internetshop`.`product`, CONSTRAINT `productTypeId` FOREIGN KEY (`productTypeId`) REFERENCES `producttype` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
  • Вопрос задан
  • 7355 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вы пытаетесь записать строку, в поле productTypeId которой указано значение, отсутствующее в таблице productType.
Ответ написан
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Перед добавлением продукта следует добавить записи в соответствующие таблицы:
INSERT INTO `brand` (`name`) VALUES ('My own brand');

INSERT INTO `category` (`name`, `discount`) VALUES ('My sweet category', 8);

INSERT INTO `producttype` (`name`) VALUES ('My little productype');

INSERT INTO `product` (`brandId`,  `categoryId`, `productTypeId`, `price`) VALUES (2, 2, 2, 200.55);

SELECT *
FROM `product` `p`
JOIN `producttype` `pt` ON `pt`.`id` = `p`.`productTypeId` 
JOIN `category` `c` ON `c`.`id` = `p`.`categoryId` 
JOIN `brand` `b` ON `b`.`id` = `p`.`brandId` 
;


MySQL online test
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы