Как удалить все связанные записи из разных таблиц MySQL
В моей базе данных есть две таблицы: "истории " и " голоса ".
Таблицаstories содержит всю информацию о статье (например, название, текст, имя автора и т. д.). ТаблицаГолосов содержит все голоса по всем статьям. Существует поле в votes, называемое item_name, которое содержит id статьи, за которую было подано голосование.
Простыми словами, item_name in votes равно id in истории (в зависимости от того, за какую статью проголосовал пользователь).
Вопрос в следующем: если статья удаляется, как я могу автоматически удалить все записи в таблице Голосов, которые связаны с этой статьей?
Может ли он быть настроен в самой базе данных, поэтому нет необходимости настраивать дополнительные запросы PHP?
Вот структура моей базы данных:
Истории
Голоса
2 ответа:
MySQL имеет различные механизмы хранения. Механизм хранения по умолчанию
MyISAM
в большинстве управляющих IDE MySQL. Если вы используете этот механизм хранения для ваших таблиц, вы не можете создать какую-либо связь между их столбцами, и вы должны удалить связанные столбцы самостоятельно.Для того, что вы хотите,
innoDB
является лучшим решением. Этот тип механизма хранения создает ситуацию для создания связи между столбцами различных таблиц. Вам понадобятся первичные ключи и внешние ключи в ваших таблицах и после создавая эти отношения, вы должны указать следующие возможности для них:
ON UPDATE CASCADE
иON DELETE CASCADE
Таким образом, вам не нужно будет удалять значения связанных столбцов после удаления основной записи.
Взгляните на эту ссылку, чтобы сравнить их в тесте бенчмарка.
Настройка внешних ключей в связанных полях с помощью cascade on delete.
Возможно, кто-то сможет дать вам более подробный ответ, но вы должны использовать движок, который поддерживает внешние ключи (например, InnoDB), и PHPMyAdmin должен помочь вам с остальными, если вы не знаете, как это сделать вручную.
Проще говоря, установка cascade on delete в поле говорит вашей базе данных удалить каждую запись, которая имеет это ограничение, когда в вашем случае статья (которая находится в другой таблице) удаленный.
Смотрите здесь для получения дополнительной информации:
Http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html