При удалении объекта в колонку deleted_at записывается время удаления и в модели везде проставляются фильтры, чтобы не выводить удаленные объекты. Для получения удаленных объектов лучше создать отдельный скоуп.
Мне нравится, как это реализовано в Ларавеле, можете глянуть
детали в документации.
Что касается MySQL, то есть возможность восстановления недавно удаленных объектов из
логов:
mysqlbinlog binary_log_file > query_log.sql