Maison > base de données > tutoriel mysql > le corps du texte

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

黄舟
Libérer: 2017-03-18 13:57:27
original
1557 Les gens l'ont consulté

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
Copier après la connexion

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';
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

ou

set @@global.FOREIGN_KEY_CHECKS = 0;
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal