programing

외부 키 제약을 적용하지 않는 mysqldump 파일을 자동으로 만들 수 있습니까?

coolbiz 2022. 9. 24. 22:39
반응형

외부 키 제약을 적용하지 않는 mysqldump 파일을 자동으로 만들 수 있습니까?

데이터베이스에서 mysqldump 명령을 실행한 후 Import를 시도하면 테이블이 알파벳 순으로 작성되기 때문에 실패합니다.다만 파일 뒷부분에서 테이블을 참조하는 외부 키가 있을 수 있습니다.문서에는 아무것도 없는 것 같습니다.또, 다음과 같이 파일을 작성한 후에 파일을 갱신해 주세요.라고 하는 회답이 있습니다.

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

이러한 행을 자동으로 설정하거나 필요한 순서로 테이블을 내보낼 수 있는 방법은 없습니까(모든 테이블 이름을 수동으로 지정할 필요가 없습니다).이러한 경우 지루하고 오류가 발생하기 쉽습니다.이러한 행을 스크립트로 정리할 수는 있지만 파일을 덤프하고 수동으로 업데이트하지 않고 Import할 수 있는 쉬운 방법이 없을까요?

mysqldump기본적으로 버전 4.1.1부터 MySQL에 포함된 명령어를 사용하면 외부 키 검사를 해제하는 스크립트가 생성됩니다.덤프 파일의 맨 위에 다음 행이 포함됩니다.

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40014 ... */구문은 MySQL 버전 4.0.14 이후에 실행되는 조건부 주석입니다.이전 외부 키 검사 설정이 덤프 파일 끝에 복원됩니다.

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

조건부 코멘트는 (서버가 아닌) 클라이언트에 의해 해석됩니다.덤프 파일을 지원하지 않는 클라이언트에서 덤프 파일을 로드하면 외부 키 검사가 비활성화되지 않고 오류가 발생할 수 있습니다.최상의 결과를 얻으려면 mysql 공식 명령줄 클라이언트를 사용하여 덤프 파일을 로드하는 것이 좋습니다.

mysql -hserver -uuser -p database < dumpfile.sql

또한 주의할 필요가 있습니다.mysqldump옵션과 함께 실행됩니다.그러면 외부 키체크를 디세블로 하고 다시 이노블로 하는 명령어는 덤프 파일에서 생략됩니다.

주의하세요. mysqldump는 --sysqldump 옵션을 사용할 경우 FORENAR_KEY_CHECKS=0을 쓰지 않습니다.

안녕히 계세요.

SQL을 내보낼 때 phpMyAdmin을 사용하는 경우 Custom Export Method를 선택합니다.그런 다음 확인란 옵션 중에서 "외부검사 사용 안 함"을 클릭합니다.내보낸 SQL 문에는 출력 파일의 시작 부분과 끝에 각각 disable 및 enable 외부 키 검사가 있습니다.

"자동"은 아니지만 모든 내보내기에 대해 사용자가 직접 명세서를 작성할 필요는 없습니다.

수 .--compact의 한 mysqldump명령어를 입력합니다. --compact--skip-comments 대신 '그냥'--compact--skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset

하세요.mysql령어,, 문문문다다다다다★★★★

% mysqldump -u ocp6 -pocp6 ocp6 --single-transaction --result-file=dump.sql 

복원:

% mysql -u ocp6 -pocp6 ocp6 < dump.sql

다 좋습니다.

다른 MySQL 클라이언트(내 상황에서는 mycli)를 사용하여 덤프 파일을 복원하는 경우:

mysql ocp6@:(none)> \. dump.sql
[…]
(1005, 'Can\'t create table `ocp6`.`composition` (errno: 150 "Foreign key constraint is incorrectly formed")')

mycli조건부 코멘트를 이해하지 못할 것으로 생각됩니다.

를 사용합니다.--single-transaction한 번의 트랜잭션으로 모든 것을 할 수 있습니다.한 형식의 것을 할 수 없습니다.Foreign key constraint모든 트랜잭션에서 오류가 발생하면 쿼리 실행이 중지됩니다. 것은, 「중략」을 입니다.Foreign key constraint이치노

MySQL WorkBench를 사용하는 방법이 효과적이었습니다.

먼저 DB를 모델로 리버스했습니다.그런 다음 모델 탭을 열고 EXPORT -> Forward-engineer SQL Create Script 옵션을 사용했습니다.FK 구속조건 및 FK 인덱스를 내보낼지 여부를 선택할 수 있는 대화 상자가 나타납니다.

사용한 MySQL Workbench 버전은 버전 8.0.29입니다.이전 버전에서는 지원되어야 하는데, 시도해 볼 때까지 잘 모르기 때문에 이전 버전을 사용하시는 경우 주행거리가 달라질 수 있습니다.

언급URL : https://stackoverflow.com/questions/2429655/can-you-automatically-create-a-mysqldump-file-that-doesnt-enforce-foreign-key-c

반응형