Quando eseguo questo comando in MySQL:
SET FOREIGN_KEY_CHECKS=0;
Interessa l'intero motore o è solo la mia transazione corrente?
Quando eseguo questo comando in MySQL:
SET FOREIGN_KEY_CHECKS=0;
Interessa l'intero motore o è solo la mia transazione corrente?
Risposte:
È basato sulla sessione, quando impostato come hai fatto nella tua domanda.
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
Secondo questo, FOREIGN_KEY_CHECKSè "Entrambi" per portata. Ciò significa che può essere impostato per la sessione:
SET FOREIGN_KEY_CHECKS=0;
o globalmente:
SET GLOBAL FOREIGN_KEY_CHECKS=0;
In realtà, ci sono due foreign_key_checksvariabili: una variabile globale e una variabile locale (per sessione). Al momento della connessione, la variabile di sessione viene inizializzata sul valore della variabile globale.
Il comando SET foreign_key_checksmodifica la variabile di sessione.
Per modificare la variabile globale, utilizzare SET GLOBAL foreign_key_checkso SET @@global.foreign_key_checks.
Consultare le seguenti sezioni del manuale:
http://dev.mysql.com/doc/refman/5.7/en/using-system-variables.html
http://dev.mysql.com/doc/refman/5.7/en/server -Sistema-variables.html
foreign_key_checkse in quella stessa sessione aspettarsi che ignori i vincoli delle chiavi esterne. Devi impostare la variabile non globale.
Come spiegato da Ron, ci sono due variabili, locale e globale. La variabile locale viene sempre utilizzata ed è uguale a globale al momento della connessione.
SET FOREIGN_KEY_CHECKS=0;
SET GLOBAL FOREIGN_KEY_CHECKS=0;
SHOW Variables WHERE Variable_name='foreign_key_checks'; # always shows local variable
Quando si imposta la variabile GLOBAL, quella locale non viene modificata per nessuna connessione esistente. È necessario ricollegare o impostare anche la variabile locale.
Forse non intuitivo, MYSQL non impone le chiavi esterne quando vengono riattivati FOREIGN_KEY_CHECKS. Ciò consente di creare un database incoerente anche se le chiavi esterne e i controlli sono attivi.
Se vuoi che le tue chiavi esterne siano completamente coerenti, devi aggiungere le chiavi mentre il controllo è attivo.
# will get you the current local (session based) state.
SHOW Variables WHERE Variable_name='foreign_key_checks';
Se non hai impostato GLOBAL, solo la tua sessione è stata interessata.
Ho avuto lo stesso errore quando ho provato a migrare il database Drupal su un nuovo server Apache locale (sto usando XAMPP su computer Windows). In realtà non conosco il significato di questo errore, ma dopo aver provato i passaggi seguenti, ho importato il database senza errori. Spero che questo possa aiutare:
Modifica php.ini in C: \ xampp \ php \ php.ini
max_execution_time = 600
max_input_time = 600
memory_limit = 1024M
post_max_size = 1024M
Modifica di my.ini in C: \ xampp \ mysql \ bin \ my.ini
max_allowed_packet = 1024M
In caso di utilizzo del browser di query Mysql, SET FOREIGN_KEY_CHECKS=0;non ha alcun impatto nella versione 1.1.20. Tuttavia, funziona perfettamente con il browser di query Mysql 1.2.17