Что происходит после удаления топика?

Когда я удаляю топик (на сайте, кнопкой удалить).
Из таблиц удаляется только prefix_topic т.е. информация о том, что существует некий топик.
Однако, содержание этого топика не исчезет(таблица prefix_topic_content). Подскажите, это так и должно быть? Таблицы у меня вроди бы как InnoDB

10 комментариев

avatar
боюсь соврать, но контент топика обычно вещь достаточно ценная и её, наверное, на всякий случай сохраняют (восстановление топика, официальный отказ автору, причина блокировки пользователя и т.п.)
avatar
Люди, подскажите пожалуйста кто знает как сделать так, чтобы при удалении топика админом топик удалялся бы не только из prefix_topic а и из prefix_topic_content. На 0.3.1 у меня стояли модули «топики фотоотчеты», «конкурсы», «холивары» плюс куча разных хаков. Сейчас после перехода на 0.4.2 ничего этого нет, а база данных под 200 mb. Я конечно через pma удалил лишние топики из prefix_topic_content хоть это и геморно, но в последующем заметил, что если удалить топик то он удаляется только из prefix_topic а в prefix_topic_content остается. Зачем так сделано я не знаю, но мне надо чтобы удалялись из обеих таблиц. Может кто то уже сделал подобное?
avatar
Продвинутые подскажите пожалуйста так и должно быть или это у меня одного траблы с таблицами?
avatar
avatar
Если таблицы в InnoDB то тексты топиков будут удаляться автоматически.

CONSTRAINT `prefix_topic_content_fk` FOREIGN KEY (`topic_id`) REFERENCES `prefix_topic` (`topic_id`) ON UPDATE CASCADE ON DELETE CASCADE
Может лучше настроить сервер, что бы автоматически поддерживалась ссылочная целостность? ;)
avatar
Да нифига они не удаляются, у меня все таблицы в InnoDB, единственно только две prefix_event_read и prefix_place_read почему то в MyISAM, но они из Афиши и к обычным топикам кажись не касаются. Может кроме InnoDB еще что нибудь надо настроить?
avatar
Так мало таблицы в InnoDB держать, надо еще чтоб связи между таблицами были правильно прописаны. Только в этом случае будет корректное удаление записей из нескольких связанных таблиц.
avatar
Ну это есть изначально в 0.4.2 или надо что то настраивать помимо LS? Напишите пожалуйста как конкретно это сделать если не трудно.
avatar
попробуй выполнить SQL запрос:
ALTER TABLE `prefix_topic_content`
  ADD CONSTRAINT `prefix_topic_content_fk` FOREIGN KEY (`topic_id`)
  REFERENCES `prefix_topic` (`topic_id`)
  ON DELETE CASCADE ON UPDATE CASCADE;

Естественно, меняешь prefix_ на свой, если он другой. Если не ругнется сервер, значит внешние ключи у тебя скорее всего не заданы. Тогда открываешь файл sql.sql и находишь аналогичные строки в конце:
ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEY ...
И раз у тебя правильный InnoDB, то все эти команды и выполняешь, чтоб установились ключи, как они должны быть.

ВНИМАНИЕ! Перед любыми работами с «живой» базой данных крайне рекомендуется сделать ее дамп. И не говорите потом, что вас не предупредили!
avatar
Каким образом можно повредить связи в таблицах с ИнноДБ?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.