Я использую триггер, который обнаруживает удаление и выполняет какие-то незаконные действия, поэтому вся операция завершается неудачно. Например, как это:
CREATE TRIGGER protect_delete before delete ON protected_table
FOR EACH ROW UPDATE non_existing_table SET non_existing_column=1;
Так что, когда кто-то попытается удалить операцию, весь оператор потерпит неудачу. Вы также можете использовать более подходящие имена для non_existing_column и non_existing_table.
Например, можно получить сообщение об ошибке, подобное этому:
ОШИБКА 1146 (42S02): таблица «database.delete_restricted_on_tableX»
не существует
РЕДАКТИРОВАТЬ: также возможно создавать еще лучшие сообщения об ошибках, пожалуйста, проверьте здесь http://www.brokenbuild.com/blog/2006/08/15/mysql-triggers-how-do-you-abort-an-insert-update-or-delete-with-a-trigger/