2010-10-10 9 views
5
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; 

Je ne comprends pas la signification de mettre ENGINE = INNODB ici, et pourquoi utilisons-nous ON DELETE CASCADE?concept de clé étrangère mysql

Répondre

3

engine = innodb vous assurera le support des clés étrangères. Le moteur MyISAM par défaut ne prend pas en charge les clés étrangères. En cas de suppression, la ligne enfant sera supprimée si la ligne référencée dans la table parent est supprimée.

1

MySQL est le moteur DB. Il peut utiliser plusieurs moteurs de stockage. MyISAM est le moteur de stockage par défaut pour MySQL et ne supporte pas les clés étrangères. InnoDB est un autre moteur de stockage qui prend en charge les clés étrangères. Vous devez spécifier ENGINE = InnoDB car MySQL utilisera MyISAM par défaut. ON DELETE CASCADE supprimera toutes les lignes d'une table contenant une clé étrangère qui fait référence à une clé supprimée. Je pense que c'est dangereux et défait beaucoup de l'objectif de la restriction de la clé étrangère, alors j'éviterais de l'utiliser, mais ce n'est que mon opinion personnelle.

Supposons que vous avez:

+-------+-------+ 
| ordID | proID | 
+-------+-------+ 
|  1 |  1 | 
|  2 |  1 | 
|  3 |  1 | 
|  4 |  2 | 
|  5 |  2 | 
+-------+-------+ 

Et OrdersItems il a FOREIGN KEY (proID) Références Produits (proID) sur CASCADE SUPPR.

Alors si quelqu'un court

DELETE FROM Products WHERE proID = 2 

Puis lignes avec ordID 4 et 5 seront également supprimés (il cascades).

+0

alors est-ce que j'utilise la cascade ou pas? Qu'en est-il de la mise à jour –

+0

Je n'utiliserais ni. Si vous voulez les utiliser est totalement à vous cependant. Je vous suggère de les lire entièrement dans l'API MySQL avant de prendre votre décision: http://dev.mysql.com/doc/refman/5.1/fr/innodb-foreign-key-constraints.html –

Questions connexes