843 votes

Comment désactiver temporairement une contrainte de clé étrangère dans MySQL ?

Est-il possible de désactiver temporairement les contraintes dans MySQL ?

J’ai deux modèles de Django, chacun avec un ForeignKey à l’autre. Suppression d’instances d’un modèle renvoie une erreur à cause de la contrainte ForeignKey :

Est-il possible de temporairement désactiver les contraintes et supprimer toute façon ?

1805voto

Andrew Campbell Points 1633

Essayez `` ou

n’oubliez pas de

après.

197voto

berniey Points 180

Pour désactiver la contrainte de clé étrangère dans le monde, procédez comme suit :

et n’oubliez pas de le mettre lorsque vous avez terminé

AVERTISSEMENT : Vous devriez seulement faire cela lorsque vous effectuez la maintenance mode mono-utilisateur. Comme il aurait pu entraîné incohérence de données. Par exemple, il sera très utile lorsque vous téléchargez grande quantité de données à l’aide d’une sortie de mysqldump.

28voto

dnagirl Points 11581

Plutôt que de désactiver votre contrainte, de modifier de façon permanente SUR on DELETE SET NULL. Que va accomplir une chose de similaire et vous n'auriez pas à tourner la clé de contrôle sur et en dehors. Comme suit:

ALTER TABLE tablename1 DROP FOREIGN KEY fk_name1; //get rid of current constraints
ALTER TABLE tablename2 DROP FOREIGN KEY fk_name2;

ALTER TABLE tablename1 
  ADD FOREIGN KEY (table2_id) 
        REFERENCES table2(id)
        ON DELETE SET NULL  //add back constraint

ALTER TABLE tablename2 
  ADD FOREIGN KEY (table1_id) 
        REFERENCES table1(id)
        ON DELETE SET NULL //add back other constraint

Avoir une lecture de ce (http://dev.mysql.com/doc/refman/5.5/en/alter-table.html) et ce (http://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html).

3voto

Chanoch Points 89

Si le champ de clé null, alors vous pouvez également définir la valeur null avant d’essayer de le supprimer :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X