Удалить строки из таблицы, когда конкретная строка из другой таблицы была удалена
У меня есть группа, и каждая группа имеет контакты, связанные с ней. Когда пользователь удаляет группу, если группа не пуста, он предупреждает их, что все контакты в этой группе будут удалены, если они продолжат работу. Ну, в любом случае, так что моя проблема заключается в настройке этой функции.
Я попытался выяснить, как я могу удалить все контакты, принадлежащие этой группе, а также удалить группу.
Прежде чем продолжить, я задаюсь вопросом, а существует ли своего рода автоматизированный способ сделать это с помощью внешних ключей?
Ну, если не все в порядке, это мой запрос, но SQL Workbench выдает следующую ошибку
DELETE c
FROM `list_`.`contacts` AS c
INNER JOIN `list_`.`groups` AS g ON c.group_id = g.id
WHERE g.group = 'School'
AND c.user_id = 2;
ошибка:
Error Code: 1046 No database selected
действительно запутался здесь, я также пытался c.*
4 ответа
MySQL поддерживает удаление нескольких таблиц в одном выражении - используйте:
DELETE c, g
FROM `list_`.`contacts` AS c
JOIN `list_`.`groups` AS g ON c.group_id = g.id
AND g.group = 'School'
WHERE c.user_id = 2;
Что касается кода ошибки 1046, при использовании WorkBench убедитесь, что в раскрывающемся меню над вкладкой "Обозреватель объектов" выбрана соответствующая база данных / каталог. Вы можете указать схему / базу данных / каталог по умолчанию для соединения - выберите параметры "Управление соединениями" под заголовком "Разработка SQL" заставки Workbench.
В Mysql вы можете попробовать что-то вроде этого для триггера:
DELIMITER $$
DROP TRIGGER IF EXISTS `deluser`$$
CREATE TRIGGER `deluser` BEFORE DELETE on `biguser`
FOR EACH ROW
BEGIN
DELETE FROM smalluser WHERE id=OLD.id;
END$$
DELIMITER ;
Примечание: триггер должен быть перед удалением, иначе вы можете потерять ключ, который хотите использовать для удаления записей.
Вы не указываете свою RDBMS, но в SQL Server вы можете включить каскадное удаление, НО я бы не советовал делать это; это слишком опасно
Обновление: MySQL InnoDB также поддерживает каскадное удаление: ограничения FOREIGN KEY
Безопаснее сначала вручную удалить все ссылочные строки, а затем удалить группу.
Сообщение об ошибкеError Code: 1046 No database selected
"предполагает, что это не ваш TSQL по вине. Вы указываете на базу данных?