Удалить другие данные с внешним ключом - PullRequest
1 голос
/ 05 марта 2019

Я подаю заявку на прохождение практики.Мы играем в игры в перерыве, и я подаю заявку, чтобы отслеживать счет.

Я могу добавлять игры с игроками.После этого я могу отредактировать игру и назначить победителя.Игровой стол и стол победителей являются отдельными.

Players: ID(PK), name
Games: ID(PK), player_1(FK), player_2(FK) --- Connected to players.id
Winners: ID(FK), name (FK) --- winners.id connected to games.id, name to players.

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

Я знаю почему, потому что победитель связан с игрой,Но как я могу удалить игру и немедленно удалить победителя из другого стола?

1 Ответ

1 голос
/ 05 марта 2019

Сначала удалите ограничение внешнего ключа из winners:

ALTER TABLE winners DROP FOREIGN KEY yourforeignkeyname

Затем заново создайте его с помощью ON DELETE CASCADE :

ALTER TABLE winners 
ADD CONSTRAINT yourforeignkeyname 
FOREIGN KEY (ID) 
REFERENCES games(ID) 
ON DELETE CASCADE;

Теперь при удаленииигра, строки победителя также будут удалены.

...