Maison  >  Article  >  base de données  >  Partage d'exemple de code pour MySQL pour ignorer les contraintes de clé étrangère lors de la suppression d'une table

Partage d'exemple de code pour MySQL pour ignorer les contraintes de clé étrangère lors de la suppression d'une table

黄舟
黄舟original
2017-03-18 13:57:271557parcourir

L'éditeur ci-dessous vous apportera une implémentation simple de MySQL ignorant les contraintes de clé étrangère lors de la suppression d'une table. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'œil.

La suppression de tables n'est pas particulièrement courante, en particulier pour les tables avec des associations de clés étrangères, alors soyez prudent lorsque vous les supprimez. Cependant, au cours du processus de développement, il est courant de rencontrer des problèmes avec la conception du schéma et de supprimer toutes les tables de la base de données existante et de les recréer. De plus, lors des tests, il est également nécessaire de recréer toutes les tables de la base de données. Bien entendu, de nombreux outils automatisés peuvent également le faire.

Lors de la suppression d'une table, vous rencontrez parfois ce message d'erreur :

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

C'est parce que la table que vous essayez de supprimer contient Le champ est utilisé comme clé étrangère dans une autre table, donc la table avec la clé étrangère (table enfant) doit être supprimée avant de supprimer cette table (table parent). En d’autres termes, le processus de suppression d’une table doit être le même que le processus de création d’une table.

Mais c'est souvent inacceptable. D'une part, s'il y a trop de tables, le tri manuel est un peu inacceptable. D'autre part, il n'y a pas d'outil de tri automatique (en fait, ce n'est pas le cas) ; impossible). Par conséquent, MySQL fournit une variable FOREIGN_KEY_CHECKS pour définir s'il faut vérifier les contraintes de clé étrangère lorsque cela est nécessaire.

Il est généralement recommandé de faire ceci :

Tout d'abord, générez automatiquement toutes les instructions DROP et remplacez MyDatabaseName par le nom de votre base de données :

SELECT concat('DROP TABLE IF EXISTS ', table_name, ';')
FROM information_schema.tables
WHERE table_schema = 'MyDatabaseName';

Ensuite, ajoutez les instructions suivantes pour définir la variable FOREIGN_KEY_CHECKS avant et après le code généré :

SET FOREIGN_KEY_CHECKS = 0
-- DROP语句
SET FOREIGN_KEY_CHECKS = 1;

Cependant, peu importe si vous oubliez la dernière phrase, cette variable est en fonction de la Session, c'est-à-dire que lorsque vous fermez le client et rétablissez la connexion, cette variable reviendra à la valeur par défaut. Si vous n'avez pas besoin de vérifier les contraintes de clé étrangère dans la portée globale (cette situation sera relativement rare), vous pouvez le faire :

SET GLOBAL FOREIGN_KEY_CHECKS = 0;

ou

set @@global.FOREIGN_KEY_CHECKS = 0;

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn