Kiedy wykonuję to polecenie w MySQL:
SET FOREIGN_KEY_CHECKS=0;
Czy wpływa to na cały silnik, czy to tylko moja bieżąca transakcja?
Kiedy wykonuję to polecenie w MySQL:
SET FOREIGN_KEY_CHECKS=0;
Czy wpływa to na cały silnik, czy to tylko moja bieżąca transakcja?
Odpowiedzi:
Opiera się na sesji, gdy ustawiasz to, co zrobiłeś w swoim pytaniu.
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
Zgodnie z tym FOREIGN_KEY_CHECKSjest „oba” dla zakresu. Oznacza to, że można ustawić sesję:
SET FOREIGN_KEY_CHECKS=0;
lub globalnie:
SET GLOBAL FOREIGN_KEY_CHECKS=0;
W rzeczywistości istnieją dwie foreign_key_checkszmienne: zmienna globalna i zmienna lokalna (na sesję). Po połączeniu zmienna sesji jest inicjalizowana do wartości zmiennej globalnej.
Polecenie SET foreign_key_checksmodyfikuje zmienną sesji.
Aby zmodyfikować zmienną globalną, użyj SET GLOBAL foreign_key_checkslub SET @@global.foreign_key_checks.
Zapoznaj się z następującymi sekcjami podręcznika:
http://dev.mysql.com/doc/refman/5.7/en/using-system-variables.html
http://dev.mysql.com/doc/refman/5.7/en/server -system-variable.html
foreign_key_checksi w tej samej sesji można oczekiwać, że zignoruje ograniczenia kluczy obcych. Musisz ustawić zmienną nieglobalną.
Jak wyjaśnił Ron, istnieją dwie zmienne, lokalna i globalna. Zmienna lokalna jest zawsze używana i po podłączeniu jest taka sama jak globalna.
SET FOREIGN_KEY_CHECKS=0;
SET GLOBAL FOREIGN_KEY_CHECKS=0;
SHOW Variables WHERE Variable_name='foreign_key_checks'; # always shows local variable
Podczas ustawiania zmiennej GLOBAL, zmienna lokalna nie jest zmieniana dla żadnych istniejących połączeń. Musisz ponownie połączyć lub ustawić zmienną lokalną.
Być może nieintuicyjny, MYSQL nie wymusza kluczy obcych, gdy FOREIGN_KEY_CHECKS są ponownie włączone. Umożliwia to utworzenie niespójnej bazy danych, nawet jeśli klucze obce i kontrole są włączone.
Jeśli chcesz, aby klucze obce były całkowicie spójne, musisz dodać klucze, gdy sprawdzanie jest włączone.
# will get you the current local (session based) state.
SHOW Variables WHERE Variable_name='foreign_key_checks';
Jeśli nie ustawiłeś GLOBAL, dotyczy to tylko Twojej sesji.
Miałem ten sam błąd, gdy próbowałem migrować bazę danych Drupal na nowy lokalny serwer Apache (używam XAMPP na komputerze z systemem Windows). Właściwie nie znam znaczenia tego błędu, ale po wykonaniu poniższych kroków zaimportowałem bazę danych bez błędów. Mam nadzieję, że to może pomóc:
Zmiana php.ini na C: \ xampp \ php \ php.ini
max_execution_time = 600
max_input_time = 600
memory_limit = 1024M
post_max_size = 1024M
Zmiana my.ini w C: \ xampp \ mysql \ bin \ my.ini
max_allowed_packet = 1024M
W przypadku korzystania z przeglądarki zapytań MySQL SET FOREIGN_KEY_CHECKS=0;nie ma ona wpływu na wersję 1.1.20. Działa to jednak poprawnie w przeglądarce zapytań MySQL 1.2.17