2011-12-28 16 views
6

Tengo dos tablas en mi base de datos: 'historias' y 'votos'.
La tabla historias contiene toda la información sobre un artículo (por ejemplo, título, cuerpo, nombre del autor, etc.). La tabla votos contiene todos los votos en todos los artículos. Hay un campo en votos llamado nombre_eje que contiene id de un artículo sobre el que se emitió un voto.Cómo eliminar todos los registros relacionados de diferentes tablas de MySQL

En palabras sencillas, ITEM_NAME en califican es igual a Identificación en historias (dependiendo de qué artículo de un usuario a votación).

La pregunta es: si se elimina un artículo, ¿cómo puedo eliminar automáticamente todos los registros en la tabla que están relacionados con ese artículo?

¿Se puede configurar en la base de datos, por lo que no es necesario configurar consultas PHP adicionales?

Aquí es la estructura de mi base de datos:

historias

enter image description here


califican enter image description here

+0

Consulte [ON DELETE CASCADE] (http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html) si tiene relaciones FK configuradas. Si no tiene una relación de FK configurada, deberá eliminar los datos de los votos manualmente. –

Respuesta

6

MySQL tiene diferentes motores de almacenamiento. El motor de almacenamiento predeterminado es MyISAM en la mayoría de los IDE administradores de MySQL. Si usa este motor de almacenamiento para sus tablas, no puede crear ninguna relación entre sus columnas y debe eliminar las columnas relacionadas usted mismo.

Para lo que quiere, innoDB es la mejor solución. Este tipo de motor de almacenamiento crea la situación para crear relaciones entre columnas de diferentes tablas.Necesitará claves principales y claves externas de las tablas y después de la creación de estos respecto, debe especificar las características a continuación a ellos:

ON UPDATE CASCADE y ON DELETE CASCADE

para que no se tenga que eliminar valores de las columnas relacionadas después de eliminar el registro principal.

Consulte this link para compararlos en una prueba de índice de rendimiento.

+0

Ahora la tabla de votos es de tipo innoDB, ¿ambos tienen que ser del mismo tipo o funcionarán correctamente? – Ilja

+0

@IlyaKnaup, sí, ambos necesitan usar InnoDB para funcionar. –

+0

También necesita crear sus relaciones, de lo contrario no puede lograr su objetivo simplemente configurándolos como InnoDB –

2

Establecer las claves externas en los campos relacionados con cascada en eliminar.

Quizás alguien sea capaz de darle una respuesta más detallada, pero tiene que usar un motor que admita claves externas (como InnoDB), y PHPMyAdmin debería ayudarlo con el resto si no sabe cómo hacerlo a mano.

En pocas palabras, establecer cascada en eliminar en un campo indica a su base de datos que elimine cada registro que tenga esa restricción cuando, en su caso, se elimine el artículo (que está en otra tabla).

Ver aquí para obtener más información:

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

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

Cuestiones relacionadas