To nie tyle odpowiedź na pytanie, co uzasadnienie dla tego rodzaju funkcjonalności - stąd negacja tych, którzy powiedzieliby „powinieneś zrobić coś innego” lub „dlaczego miałbyś chcieć”.
Mam bazę danych, na której staram się przestrzegać ścisłych zasad - nie chcę nigdzie sierot. Kontrole integralności referencyjnej pomagają mi w tym na poziomie tabeli, ale muszę zachować niektóre dane jako pliki w systemie plików (jest to wynik bezpośredniego polecenia mojego szefa, aby nie przechowywać żadnych danych binarnych w samej bazie danych).
Oczywistym rozwiązaniem tutaj jest posiadanie wyzwalacza, który uruchamia się po usunięciu rekordu, który następnie automatycznie usuwa powiązany plik zewnętrzny.
Teraz zdaję sobie sprawę, że UDF może zapewnić rozwiązanie, ale wydaje się, że dużo pracy w C/C++, aby po prostu usunąć plik. Z pewnością same uprawnienia do bazy danych zapewniłyby przynajmniej niektóre bezpieczeństwo przed potencjalnymi napastnikami.
Teraz zdaję sobie sprawę, że mógłbym napisać skrypt powłoki lub coś takiego, który mógłby usunąć rekord tabeli, a następnie usunąć powiązany plik, ale znowu, jest to poza domeną samej bazy danych . Jak powiedział mi kiedyś stary instruktor „zasady biznesu powinny znaleźć odzwierciedlenie w regułach bazy danych”. Jak widać wyraźnie, nie mogę tego wymusić za pomocą MySQL.