Проверка 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;
Другие вопросы по тегам