Как удалить все связанные записи из разных таблиц MySQL


В моей базе данных есть две таблицы: "истории " и " голоса ".
Таблицаstories содержит всю информацию о статье (например, название, текст, имя автора и т. д.). ТаблицаГолосов содержит все голоса по всем статьям. Существует поле в votes, называемое item_name, которое содержит id статьи, за которую было подано голосование.

Простыми словами, item_name in votes равно id in истории (в зависимости от того, за какую статью проголосовал пользователь).

Вопрос в следующем: если статья удаляется, как я могу автоматически удалить все записи в таблице Голосов, которые связаны с этой статьей?

Может ли он быть настроен в самой базе данных, поэтому нет необходимости настраивать дополнительные запросы PHP?

Вот структура моей базы данных:

Истории

Введите описание изображения здесь


Голоса Введите описание изображения здесь

2 6

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

Http://forums.digitalpoint.com/showthread.php?t=488163