2010-03-12 2 views
31

데이터베이스에서 mysqldump 명령을 실행 한 다음 가져 오기를 시도하면 나중에 파일의 테이블을 참조하는 외래 키가있을 수 있지만 테이블을 알파벳순으로 만들려고하면 실패합니다. 거기 documentation의 어떤 것으로 나타나지 않고 나는 포함하기 위해 만든 것 후 파일을 업데이트 할 말을 this 같은 답을 발견했습니다 : 외래 키 제약 조건을 적용하지 않는 mysqldump 파일을 자동으로 생성 할 수 있습니까?

set FOREIGN_KEY_CHECKS = 0; 
...original mysqldump file contents... 
set FOREIGN_KEY_CHECKS = 1; 

자동으로 그 라인을 설정하거나 내보내는 방법이 없습니다를 테이블을 필요한 순서대로 수동으로 지정하지 않아도됩니다 (지루하고 오류가 발생할 수 있으므로 모든 테이블 이름을 지정하지 않아도됩니까). 스크립트에서이 줄을 감쌀 수 있지만 파일을 덤프하고 수동으로 업데이트하지 않고 가져올 수있는 쉬운 방법이 있는지 궁금해하고있었습니다.

답변

39

MySQL 5.0.51에 포함 된 mysqldump 명령 (변경 로그 버전은 4.1.1)은 외래 키 검사를 해제합니다.

/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 

/*!40014 ... */ 구문은 나중에 MySQL은 4.0.14와에서 실행됩니다 conditional comment입니다 : 기본적으로, mysqldump는 덤프 파일의 맨 위에 다음 줄이 포함되어 있습니다. 오래된 외래 키 검사 설정은 덤프 파일의 끝에 복원 :

/*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */; 
+2

는 예, 파일에 그것을 볼 수 있습니까 사용해야 --skip-comments이 포함되어 있습니다. 이 파일을 가져 오려고 시도한 다른 사람이 외래 키 행에 오류가 발생하여 생성 순서 때문인 것으로 생각했습니다. –

+5

이 질문에 어떻게 대답 했습니까? Tai는 파일에서 이러한 주석을 사용하여 오류가 발생한다고 말 했으므로 문제가 어떻게 해결 되었습니까? – JoeTidee

26

은 조심하십시오. --compact 옵션을 사용하면 어떤 이유로 mysqldump는 FOREIGN_KEY_CHECKS = 0을 쓰지 않습니다.

Ciao.

+3

그 이유는'--compact'에'--skip-comments'가 포함되어 있기 때문에'--compact' 대신'--skip-add-drop-table --skip-add-locks --skip-disable -keys --skip-set-charset' – iRonin

+2

실제로 --skip-comments도 가능합니다. 매뉴얼에 따르면 --compact "는 --skip-add-drop-table, --skip-add-locks, --skip-comments, --skip-disable-keys 및 --skip-set을 활성화합니다 -charset options "하지만, 분명히 --compact는 FOREIGN_KEY_CHECKS 문과 같은 다른 출력도 제거합니다. – dpi

9

SQL을 내보낼 때 phpMyAdmin을 사용하는 경우 사용자 지정 내보내기 방법을 선택하십시오. 그런 다음 확인란 옵션 중에서 "외부 키 검사 사용 안 함"을 클릭하십시오. 내 보낸 SQL 문에는 출력 파일의 처음과 끝에 각각 외부 키 확인을 사용 불가능하게하고 사용 가능하게합니다.

"자동"이 아니지만 수출 할 때마다 본인이 직접 작성하지 않아도됩니다.

+0

와우! 질문보다 훨씬 쉽게 작동하는 대체 솔루션 제안에 대한 찬성 – alds

+3

"훨씬 쉽게"매우 주관적이기 때문에 (실제로 유용하지는 않습니다.) 실제로 질문에 답변하지 않습니다. – sehe

+2

+1 PhpMyAdmin 사용자에게 유용합니다.다른 사람들은 주관적으로 그것을 무시하거나 매우 주관적으로 그것을 downvote 수 있습니다 :) – chim

6

mysqldump 명령 중 하나로 --compact을 사용하면이 문제가 발생할 수 있습니다. --compact 그래서 대신 --compact 하나 --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset