Могу ли я удалить вопросы и ответы пользователя, если удаляю пользователя SQL - PullRequest
0 голосов
/ 19 января 2020

У меня есть таблица вопросов и таблицы ответов пользователя на SQL. Я хочу добавить внешний ключ с помощью каскада удаления на вопросы внешнего ключа user_ID и ответов на внешний ключ user_ID, чтобы при удалении пользователя все его вопросы и ответы также удалялись. Но SQL говорит:

Введение ограничения FOREIGN KEY 'FK__questions__usID__1BC821DD' в таблице 'вопросов' может привести к циклам или нескольким каскадным путям. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.

Как я могу это сделать.

1 Ответ

0 голосов
/ 19 января 2020

Требуется внешний ключ в таблице questions (соответственно: answers), который ссылается на таблицу users и удаляет все вопросы (или ответы) пользователя, когда он удаляется из users Таблица.

Это должно работать в соответствии с дизайном:

alter table answers add constraint answers_users 
    foreign key(user_id)
    references users(user_id)
    on delete cascade
;

alter table questions add constraint questions_users 
    foreign key(user_id)
    references users(user_id)
    on delete cascade
;

Рассмотрим это демо :

-- create the tables
create table users (user_id int primary key);
create table questions(question_id int primary key, user_id int);
create table answers(answer_id int primary key, user_id int);

-- add the constraints
alter table answers add constraint answers_users 
    foreign key(user_id)
    references users(user_id)
    on delete cascade
;
alter table questions add constraint questions_users 
    foreign key(user_id)
    references users(user_id)
    on delete cascade
;

-- insert a few records - we have two users: 1 and 2
insert into users values (1), (2);
insert into questions values(1, 1), (2, 2);
insert into answers values(1, 1), (2, 2);

-- now delete user 1
delete from users where user_id = 1;

-- the corresponding record was removed from "questions"
select * from questions;

question_id | user_id
----------: | ------:
          2 |       2

-- ... and it was removed from "answers" as well
select * from answers;

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