2010-01-24 7 views
0

J'ai défini l'intégrité de la clé étrangère dans une table. Mais je suis capable de supprimer des données de la table principale, qui est la référence dans la table enfant .. Quel serait le problème En fait, il devrait dire une erreur sur la suppression comme toutes les données de table référencées doivent être supprimés.contraintes de clé étrangère mysql

+2

Quel moteur de stockage utilisez-vous? "Pour les moteurs de stockage autres qu'InnoDB, le serveur MySQL analyse la syntaxe FOREIGN KEY dans les instructions CREATE TABLE, mais ne l'utilise pas ou ne le stocke pas." (MySQL Reference Manual à http://dev.mysql.com/doc/refman/5.1/en/ansi-diff-foreign-keys.html) –

+0

Le moteur storge est MOTEUR = MyISAM – ASD

Répondre

1

Avez-vous spécifié ON SUPPRIMER CASCADE? quand vous avez créé votre FK? Je ne sais pas quel moteur vous utilisez soit

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 ici http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

+0

les deux tables doivent être des tables InnoDB, et la performance de innodb est inférieure à myisam –

+0

En fait, j'ai créé la table clairement et j'ai des données maintenant. Voulez-vous dire que j'ai besoin de recréer toute la table pour configurer la clé étrangère. – ASD

+0

Les contraintes de clé étrangère sont présentes. MySQL ne les applique pas à moins que le moteur de stockage soit défini sur InnoDB. Vous pouvez faire un "ALTER TABLE [nom de la table] ENGINE = InnoDB" (http://dev.mysql.com/doc/refman/5.1/en/alter-table.html) au lieu de recréer les tables. –

Questions connexes