Wenn ich diesen Befehl in MySQL ausführe:
SET FOREIGN_KEY_CHECKS=0;
Betrifft es die gesamte Engine oder ist es nur meine aktuelle Transaktion?
Wenn ich diesen Befehl in MySQL ausführe:
SET FOREIGN_KEY_CHECKS=0;
Betrifft es die gesamte Engine oder ist es nur meine aktuelle Transaktion?
Antworten:
Es ist sitzungsbasiert, wenn Sie festlegen, wie Sie es in Ihrer Frage getan haben.
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
Demnach FOREIGN_KEY_CHECKS
ist "Beide" für den Umfang. Dies bedeutet, dass es für die Sitzung eingestellt werden kann:
SET FOREIGN_KEY_CHECKS=0;
oder global:
SET GLOBAL FOREIGN_KEY_CHECKS=0;
Tatsächlich gibt es zwei foreign_key_checks
Variablen: eine globale Variable und eine lokale Variable (pro Sitzung). Bei der Verbindung wird die Sitzungsvariable mit dem Wert der globalen Variablen initialisiert.
Der Befehl SET foreign_key_checks
ändert die Sitzungsvariable.
Verwenden Sie SET GLOBAL foreign_key_checks
oder, um die globale Variable zu ändern SET @@global.foreign_key_checks
.
Konsultieren Sie die folgenden Abschnitte des Handbuchs:
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
und in derselben Sitzung erwarten, dass Fremdschlüsseleinschränkungen ignoriert werden. Sie müssen die nicht globale Variable festlegen.
Wie von Ron erklärt, gibt es zwei Variablen, lokal und global. Die lokale Variable wird immer verwendet und ist bei der Verbindung dieselbe wie global.
SET FOREIGN_KEY_CHECKS=0;
SET GLOBAL FOREIGN_KEY_CHECKS=0;
SHOW Variables WHERE Variable_name='foreign_key_checks'; # always shows local variable
Beim Festlegen der GLOBAL-Variablen wird die lokale Variable für vorhandene Verbindungen nicht geändert. Sie müssen die lokale Variable erneut verbinden oder festlegen.
Möglicherweise nicht intuitiv, erzwingt MYSQL keine Fremdschlüssel, wenn FOREIGN_KEY_CHECKS wieder aktiviert wird. Auf diese Weise kann eine inkonsistente Datenbank erstellt werden, obwohl Fremdschlüssel und Überprüfungen aktiviert sind.
Wenn Ihre Fremdschlüssel vollständig konsistent sein sollen, müssen Sie die Schlüssel hinzufügen, während die Überprüfung aktiviert ist.
# will get you the current local (session based) state.
SHOW Variables WHERE Variable_name='foreign_key_checks';
Wenn Sie nicht GLOBAL eingestellt haben, war nur Ihre Sitzung betroffen.
Ich hatte den gleichen Fehler, als ich versuchte, die Drupal-Datenbank auf einen neuen lokalen Apache-Server zu migrieren (ich verwende XAMPP auf einem Windows-Computer). Eigentlich kenne ich die Bedeutung dieses Fehlers nicht, aber nachdem ich die folgenden Schritte ausgeführt habe, habe ich die Datenbank ohne Fehler importiert. Hoffe das könnte helfen:
Ändern der php.ini unter C: \ xampp \ php \ php.ini
max_execution_time = 600
max_input_time = 600
memory_limit = 1024M
post_max_size = 1024M
Ändern von my.ini unter C: \ xampp \ mysql \ bin \ my.ini
max_allowed_packet = 1024M
Bei Verwendung des MySQL-Abfragebrowsers SET FOREIGN_KEY_CHECKS=0;
hat dies keine Auswirkungen auf Version 1.1.20. Es funktioniert jedoch einwandfrei mit dem MySQL-Abfragebrowser 1.2.17