Итак, у меня есть родительская таблица (пользователи) и несколько дочерних таблиц, которые ссылаются на нее с помощью FK.Прямо сейчас, все мои дочерние таблицы имеют свои FK, как на каскаде удаления, потому что, очевидно, если пользователь удаляется, я хочу, чтобы все его дочерние элементы были убиты.Моя проблема в том, что, например, если у меня есть 5 записей в моей пользовательской таблице, и я удаляю 1 из них, все записи в моих дочерних таблицах удаляются, включая записи для других 4 записей.Как сделать так, чтобы уничтожались только дети удаленного пользователя.
Родительская таблица
CREATE TABLE `user_gameworlds`
( `PlayerId_FK` int(11) DEFAULT NULL,
`GameId_FK` int(11) DEFAULT NULL,
`Join_Date` timestamp NULL DEFAULT NULL,
`Login_Time` timestamp NULL DEFAULT NULL,
`Last_Update_Time` timestamp NULL DEFAULT NULL,
KEY `PlayedId_FK_idx` (`PlayerId_FK`),
KEY `GameId_FK_idx` (`GameId_FK`),
CONSTRAINT `GameId_FK` FOREIGN KEY (`GameId_FK`) REFERENCES `game_world` (`GameId`),
CONSTRAINT `PlayedId_FK` FOREIGN KEY (`PlayerId_FK`) REFERENCES `users` (`PlayerId`) ON DELETE CASCADE)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci'
Оператор выбора родительской таблицы
Дочерняя таблица
CREATE TABLE `province` (
`ProvinceId` int(11) NOT NULL AUTO_INCREMENT,
`province_FK_PlayerId` int(11) DEFAULT NULL,
`province_FK_GameId` int(11) DEFAULT NULL,
`Capital` tinyint(4) DEFAULT NULL,
`Name` varchar(45) DEFAULT 'Province',
`Population` int(11) DEFAULT NULL,
`Morale` int(11) DEFAULT NULL,
PRIMARY KEY (`ProvinceId`),
KEY `province_FK_PlayerId_idx` (`province_FK_PlayerId`),
KEY `province_FK_GameId_idx` (`province_FK_GameId`),
CONSTRAINT `province_FK_GameId` FOREIGN KEY (`province_FK_GameId`) REFERENCES `user_gameworlds` (`GameId_FK`) ON DELETE CASCADE,
CONSTRAINT `province_FK_PlayerId` FOREIGN KEY (`province_FK_PlayerId`) REFERENCES `user_gameworlds` (`PlayerId_FK`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Оператор выбора дочерней таблицы
УДАЛЕНИЕ ЗАЯВЛЕНИЯ
Delete from user_gameworlds where PlayerId_FK = 9;
Выбор родительской таблицы после удаления
Выбор дочерней таблицы после удаления
РЕДАКТИРОВАТЬ: Для тех, кто читает это, ответ на эту проблему НЕ с использованием 2 отдельных FK, но преобразование вашей таблицы в составнойпервичный ключ