#sql #sql-server
#sql #sql-сервер
Вопрос:
CREATE TABLE Comments(
Id INT PRIMARY KEY IDENTITY(0,1),
TEXT NOT NULL,
Date Date NOT NULL ,
Point INT NOT NULL DEFAULT(0),
ID_User INT FOREIGN KEY REFERENCES Users(Id) ON DELETE CASCADE NOT NULL,
ID_Post INT FOREIGN KEY REFERENCES Posts(Id) NOT NULL
)
Когда я удаляю пользователя из таблицы Users, он показывает мне ошибку, которую содержит таблица Comments
другой ссылочный ключ. Что я должен делать?
Оператор DELETE конфликтовал с ограничением ссылки «FK__Comments__ID_Pos__76969D2E». Конфликт произошел в базе данных Facebook, таблица dbo.Comments, столбец ‘ID_Post’.
Комментарии:
1. Не могли бы вы добавить точное сообщение об ошибке к вашему вопросу, пожалуйста.
2. Я предполагаю, что у вас есть каскадирование при удалении в вашу таблицу
Posts
изUsers
, но (как показано в вашем DDL выше) не наComments
изPosts
. В результате, когда вы удаляете пользователя, он переходит кPosts
и пытается удалить их. Однако при этом, поскольку нет каскада комментариев к комментариям (которые сделаны пользователями, которые не являются OP), они останутся «осиротевшими», и, следовательно, ошибка.3. Исправление было бы также для
ON DELETE CASCADE
другого FK.4. Вы знаете, в чем моя общая проблема? Когда я удаляю пользователя из таблицы Users, возникает проблема с ID_Post. Если я смогу удалить ID_Post как ID_User, проблема будет решена. Если пользователь удалил из таблицы Users сообщения пользователя, комментарии должны быть удалены одновременно
5. Да, поэтому добавьте
ON DELETE CASCADE
к обоим вашим внешним ключам.
Ответ №1:
Если вы хотите удалить запись пользователя, вам необходимо удалить записи в таблицах внешних ключей.
В этом случае вам нужно удалить записи в Comments
таблице.
DELETE from dbo.Commnts
Where ID_User = "userid"
Затем вы можете удалить запись пользователя из Users
таблицы
Ответ №2:
Я проделал некоторую работу над этим, во внешних ключах, на которые вы ссылались здесь, нет ошибки. возможно, у вас есть ссылка на идентификатор комментария в некоторых других таблицах.
это то, что я пробовал
CREATE TABLE Users(
Id int primary key
)
CREATE TABLE posts(
Id int primary key
)
insert into Users values(1);
insert into Users values(2);
insert into posts values(3);
insert into posts values(4);
CREATE TABLE Comments(
Id INT PRIMARY KEY IDENTITY(0,1),
ID_User INT FOREIGN KEY REFERENCES Users(Id) ON DELETE CASCADE NOT NULL,
ID_Post INT FOREIGN KEY REFERENCES Posts(Id) NOT NULL
)
insert into Comments values(1,3);
insert into Comments values(2,4);
DELETE
FROM Users
WHERE id = 1 --this works fine