Проверка MySQL перед мягким удалением
Я использую MySQL. У меня есть запись на A
таблица со столбцом мягкого удаления: active
со значением 0
,
Эта строка связана с 11 таблицами. У всех одинаковое active
колонка.
Я должен быть уверен, что запись на A
удаляется, только если все ссылки в 11 таблицах имеют active = 0
также.
Я знаю, что могу написать представление с этими запросами, чтобы получить, могу ли я "удалить" или нет. Но это один из примеров и ИМО не очень практичное решение. Каскадное обновление также не будет работать, потому что я не могу удалить родительскую строку, если какой-либо из дочерних элементов все еще активен.
Спасибо!
1 ответ
Это должно работать, если вы создаете active_view так, как вы сказали, что можете. Просто добавьте активные флаги всех связанных таблиц в столбец foreign_active, и все будет хорошо.
CREATE TRIGGER before_update_student
BEFORE UPDATE ON student FOR EACH ROW
BEGIN
IF NEW.active = 0 AND (SELECT foreign_active FROM active_view
WHERE id = NEW.id) > 0
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Cannot delete student when active roles exist.';
END IF;
END;