[mysql] MySQL foreign_key_checks가 전체 데이터베이스에 영향을 줍니까?

MySQL 에서이 명령을 실행할 때 :

SET FOREIGN_KEY_CHECKS=0;

전체 엔진에 영향을 미치나요? 아니면 현재 거래에만 해당됩니까?



답변

질문에서 수행 한 방식을 설정하면 세션 기반입니다.

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html

이것에 따르면, FOREIGN_KEY_CHECKS범위는 “모두”입니다. 이것은 세션에 대해 설정할 수 있음을 의미합니다.

SET FOREIGN_KEY_CHECKS=0;

또는 전 세계적으로 :

SET GLOBAL FOREIGN_KEY_CHECKS=0;


답변

실제로 foreign_key_checks전역 변수와 로컬 (세션 당) 변수라는 두 가지 변수 가 있습니다 . 연결되면 세션 변수는 전역 변수의 값으로 초기화됩니다.
이 명령 SET foreign_key_checks은 세션 변수를 수정합니다.
전역 변수를 수정하려면 SET GLOBAL foreign_key_checks또는을 사용하십시오 SET @@global.foreign_key_checks.

다음 매뉴얼 섹션을
참조 하십시오 . 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


답변

Ron이 설명했듯이 local과 global이라는 두 가지 변수가 있습니다. 지역 변수는 항상 사용되며 연결시 전역 변수와 동일합니다.

SET FOREIGN_KEY_CHECKS=0;
SET GLOBAL FOREIGN_KEY_CHECKS=0;

SHOW Variables WHERE Variable_name='foreign_key_checks'; # always shows local variable

GLOBAL 변수를 설정하면 기존 연결에 대해 로컬 변수가 변경되지 않습니다. 로컬 변수도 다시 연결하거나 설정해야합니다.

직관적이지 않은 MYSQL은 FOREIGN_KEY_CHECKS를 다시 활성화 할 때 외래 키를 적용하지 않습니다. 따라서 외래 키와 검사가 켜져 있어도 일관성이없는 데이터베이스를 만들 수 있습니다.

외래 키가 완전히 일관되게하려면 확인이 켜져있는 동안 키를 추가해야합니다.


답변

# will get you the current local (session based) state.
SHOW Variables WHERE Variable_name='foreign_key_checks';

GLOBAL을 설정하지 않은 경우 세션 만 영향을받습니다.


답변

Drupal 데이터베이스를 새로운 로컬 아파치 서버로 마이그레이션하려고 할 때 동일한 오류가 발생했습니다 (Windows 시스템에서 XAMPP를 사용하고 있습니다). 실제로이 오류의 의미를 모르지만 아래 단계를 시도한 후 오류없이 데이터베이스를 가져 왔습니다. 이것이 도움이되기를 바랍니다.

C : \ xampp \ php \ php.ini에서 php.ini 변경

max_execution_time = 600
max_input_time = 600
memory_limit = 1024M
post_max_size = 1024M

C : \ xampp \ mysql \ bin \ my.ini에서 my.ini 변경

max_allowed_packet = 1024M


답변

Mysql 쿼리 브라우저를 사용하는 경우 SET FOREIGN_KEY_CHECKS=0;버전 1.1.20에 영향을 미치지 않습니다. 그러나 Mysql 쿼리 브라우저 1.2.17에서는 제대로 작동합니다.


답변