Lorsque j'exécute cette commande dans MySQL:
SET FOREIGN_KEY_CHECKS=0;
Cela affecte-t-il l'ensemble du moteur ou ce n'est que ma transaction actuelle?
Lorsque j'exécute cette commande dans MySQL:
SET FOREIGN_KEY_CHECKS=0;
Cela affecte-t-il l'ensemble du moteur ou ce n'est que ma transaction actuelle?
Réponses:
Il est basé sur la session, lorsqu'il est défini comme vous l'avez fait dans votre question.
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
Selon cela, FOREIGN_KEY_CHECKS
est "Both" pour la portée. Cela signifie qu'il peut être défini pour la session:
SET FOREIGN_KEY_CHECKS=0;
ou globalement:
SET GLOBAL FOREIGN_KEY_CHECKS=0;
En fait, il existe deux foreign_key_checks
variables: une variable globale et une variable locale (par session). Lors de la connexion, la variable de session est initialisée à la valeur de la variable globale.
La commande SET foreign_key_checks
modifie la variable de session.
Pour modifier la variable globale, utilisez SET GLOBAL foreign_key_checks
ou SET @@global.foreign_key_checks
.
Consultez les sections de manuel suivantes:
http://dev.mysql.com/doc/refman/5.7/en/using-system-variables.html
http://dev.mysql.com/doc/refman/5.7/en/server -system-variables.html
foreign_key_checks
et dans cette même session, attendez-vous à ce qu'il ignore les contraintes de clés étrangères. Vous devez définir la variable non globale.
Comme expliqué par Ron, il existe deux variables, locale et globale. La variable locale est toujours utilisée et est la même que globale lors de la connexion.
SET FOREIGN_KEY_CHECKS=0;
SET GLOBAL FOREIGN_KEY_CHECKS=0;
SHOW Variables WHERE Variable_name='foreign_key_checks'; # always shows local variable
Lors de la définition de la variable GLOBAL, la variable locale n'est modifiée pour aucune connexion existante. Vous devez également vous reconnecter ou définir la variable locale.
Peut-être pas intuitif, MYSQL n'applique pas les clés étrangères lorsque FOREIGN_KEY_CHECKS est réactivé. Cela permet de créer une base de données incohérente même si les clés étrangères et les vérifications sont activées.
Si vous souhaitez que vos clés étrangères soient parfaitement cohérentes, vous devez ajouter les clés lorsque la vérification est activée.
# will get you the current local (session based) state.
SHOW Variables WHERE Variable_name='foreign_key_checks';
Si vous n'avez pas défini GLOBAL, seule votre session a été affectée.
J'ai eu la même erreur lorsque j'ai essayé de migrer la base de données Drupal vers un nouveau serveur Apache local (j'utilise XAMPP sur une machine Windows). En fait, je ne connais pas la signification de cette erreur, mais après avoir essayé les étapes ci-dessous, j'ai importé la base de données sans erreur. J'espère que cela pourrait aider:
Changer php.ini dans C: \ xampp \ php \ php.ini
max_execution_time = 600
max_input_time = 600
memory_limit = 1024M
post_max_size = 1024M
Modification de my.ini dans C: \ xampp \ mysql \ bin \ my.ini
max_allowed_packet = 1024M
En cas d'utilisation du navigateur de requêtes Mysql, SET FOREIGN_KEY_CHECKS=0;
n'a aucun impact dans la version 1.1.20. Cependant, cela fonctionne bien sur le navigateur de requêtes Mysql 1.2.17