2011-02-28 2 views
1

최근에 데이터베이스를 다른 서버로 마이그레이션했습니다.데이터베이스를 저장하는 데 도움이됩니다.

이전 서버에서는 InnoDB의 ON DELETE CASCADE 규칙을 많이 사용했습니다.

새 서버에는 MySql에 InnoDB 엔진 설정이 없습니다.

마이그레이션하는 시점에 새 서버가 MyISAM으로 옮겼습니다. 지금까지이 사실을 알지 못했습니다.

따라서 데이터베이스가 사용 중이기 때문에 ON DELETE CASCADE 규칙을 사용하는 일부 테이블이 동기화되지 않습니다. (여전히 벽을 머리에 대고 머리를 노크하고있다.) 이것은 InnoDB로 테이블을 변경하고 캐스케이드 규칙을 다시 적용 할 수 없다는 의미이다. 이제 키 중 일부는 더 이상 존재하지 않는 행을 참조한다.

INSERT 문을 구성 할 수있는 방법이 있나요 삽입되는 행 중 하나가 캐스케이드 규칙을 위반할 경우, 그냥 자동으로 다음 위에 해당 행 및 이동을 무시 너무 :

내 질문은 이것이다? (처음에는 INSERT는이 작업을 수행 할 것 무시, 그러나 나는 시도를하고 작동하지 않는 것 생각했다.)

감사를 사전에 도움을

+0

사용 "SET의 FOREIGN_KEY_CHECKS = 0"과 이노 디비에 테이블을 이동하려고 할 수 있습니다 확신합니다. 나는 시도하지는 않았지만 그것이 효과가 있는지보십시오. 아무것도하기 전에 백업을 가져 가라. – Zimbabao

답변

0

1 단계

백업을 만듭니다

2 단계

SET foreign_key_checks = 0; 

Migrate your data 

SET foreign_key_checks = 1; 

STEP 삭제 문이 ON DELETE CASCADE 규칙과 일치 3

DELETE FROM table WHERE id NOT IN (SELECT foreign_key_id FROM table2); 

은.
삭제 작업을 수행하는 순서가 중요하므로 필요에 따라 추가 백업을 계획하고 만들어야합니다.

일단 백업을 완료하고 백업 SET foreign_key_checks = x이 아닌이되도록 백업 SQL 문을 편집하십시오. 외래 키 확인 을 사용하여 백업을 활성화 한 경우이 다시 작동합니다.

나는 당신이 IN없이보다 효율적으로 삭제 쿼리를 알아낼 그냥 내 2 센트