связь с внешним ключом не работает в MySQL - PullRequest
0 голосов
/ 03 мая 2018

Здесь я делаю отношение внешнего ключа для моего SQL, у меня 3 таблицы

  1. продукт
  2. Галерея
  3. Предложение

Здесь product таблица - это главная таблица, а gallery, offer таблицы - это дочерние таблицы, сейчас я пытаюсь удалить запись в основной таблице, но этого не происходит. Я получаю сообщение об ошибке типа

Невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполняется

    CREATE TABLE `product` (
 `productId` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(100) COLLATE utf16_bin NOT NULL,
 `price` decimal(10,0) NOT NULL,
 `regOn` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`productId`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf16 COLLATE=utf16_bin

CREATE TABLE `offer` (
 `offerId` int(11) NOT NULL AUTO_INCREMENT,
 `productId` int(11) NOT NULL,
 `offerpercentage` text COLLATE utf16_bin NOT NULL,
 PRIMARY KEY (`offerId`),
 KEY `productId` (`productId`),
 CONSTRAINT `offer_ibfk_1` FOREIGN KEY (`productId`) REFERENCES `product` (`productId`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf16 COLLATE=utf16_bin

CREATE TABLE `gallery` (
 `galleryId` int(11) NOT NULL AUTO_INCREMENT,
 `productId` int(11) NOT NULL,
 `galleryName` text COLLATE utf16_bin NOT NULL,
 PRIMARY KEY (`galleryId`),
 KEY `productId` (`productId`),
 CONSTRAINT `gallery_ibfk_1` FOREIGN KEY (`productId`) REFERENCES `product` (`productId`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf16 COLLATE=utf16_bin

Ожидаемый результат

Suppose I am deleting master table entry means i have to delete all child tables entry also

1 Ответ

0 голосов
/ 03 мая 2018

Вам необходимо применить ON DELETE CASCADE к ссылкам на внешний ключ.

CREATE TABLE `product` (
 `productId` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(100) COLLATE utf16_bin NOT NULL,
 `price` decimal(10,0) NOT NULL,
 `regOn` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`productId`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf16 COLLATE=utf16_bin

CREATE TABLE `offer` (
 `offerId` int(11) NOT NULL AUTO_INCREMENT,
 `productId` int(11) NOT NULL,
 `offerpercentage` text COLLATE utf16_bin NOT NULL,
 PRIMARY KEY (`offerId`),
 KEY `productId` (`productId`),
 CONSTRAINT `offer_ibfk_1` FOREIGN KEY (`productId`) REFERENCES `product` (`productId`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf16 COLLATE=utf16_bin

CREATE TABLE `gallery` (
 `galleryId` int(11) NOT NULL AUTO_INCREMENT,
 `productId` int(11) NOT NULL,
 `galleryName` text COLLATE utf16_bin NOT NULL,
 PRIMARY KEY (`galleryId`),
 KEY `productId` (`productId`),
 CONSTRAINT `gallery_ibfk_1` FOREIGN KEY (`productId`) REFERENCES `product` (`productId`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf16 COLLATE=utf16_bin

Это говорит MySQL о том, что при удалении родителя удаляется ссылочный дочерний элемент.

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