2010-08-29 7 views
1

J'ai une table appelée 'pages'. Chaque page a un type de contenu de texte, de vidéo ou d'image. En fonction du type de contenu, un enregistrement est également inséré dans un tableau de texte, de vidéo ou d'image.Suppression de lignes d'autres tables si la ligne est supprimée de la table principale

Lorsque je supprime une ligne de 'pages', comment puis-je m'assurer que les lignes de l'autre table sont supprimées? Je comprends un peu à propos de CASCADE mais je n'utilise pas de clés étrangères. Au moins pas explicitement.

Mes tableaux ressemblent ci-dessous (je l'ai dépouillé les champs qui ne sont pas pertinents à la question)

Pages: id, titre, contenu

Vidéo: pid (id page), youtube_url

Toute aide serait grandement appréciée.

Répondre

7

si votre table est InnoDB moteur vous pouvez déclarer étrangère clé + suppression en cascade,

exemple:

CREATE TABLE parent (id INT NOT NULL, 
        PRIMARY KEY (id) 
) ENGINE=INNODB; 
CREATE TABLE child (id INT, parent_id INT, 
        INDEX par_ind (parent_id), 
        FOREIGN KEY (parent_id) REFERENCES parent(id) 
         ON DELETE CASCADE 
) ENGINE=INNODB; 

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

une autre façon est déclaré trigger - avant de supprimer.

le manuel:

http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html

un petit exemple, vous pouvez trouver:

Trigger before delete MySql

+0

Non, je ne suis pas en utilisant InnoDB. La seule autre façon que je peux voir de la résoudre est quand une ligne est retirée du parent, vérifiez le type de contenu et supprimez la ligne de la table enfant. Je suis sûr qu'il existe une meilleure solution. –

+0

vous pouvez déclarer le déclencheur, est l'option 2 que j'ai écrit –

+0

+1 - au niveau DB, ce sont les 2 options. Cependant, je suggère, si possible de le faire au niveau d'une application en utilisant une transaction. Les suppressions en cascade et les déclencheurs de bases de données peuvent devenir un cauchemar de maintenance, car ils sont notoirement difficiles à identifier lors du débogage de problèmes. – InSane

Questions connexes