우리는 수백 개의 테이블이있는 데이터베이스를 가지고 있습니다. foreign_keys를 사용하는 테이블은 INNODB를 사용합니다.MySQL이 유효하지 않은 외래 키를 찾는다
때때로 우리는 개발, 단계 및 프로덕션 데이터베이스간에 데이터 (mysqldump
을 사용하는 개별 테이블)를 전송합니다. mysqldump
은 데이터를 쉽게 가져올 수 있도록 모든 외부 키 검사를 비활성화합니다.
시간이 지남에 따라 일부 비 프로덕션 데이터베이스는 고아 레코드로 끝납니다.
전체 MySQL 데이터베이스에 대해 잘못된 키 (누락 된 레코드를 가리키는 키) 외래 키를 찾고 발견하는 스크립트를 작성하려고했습니다.
각 테이블과 fkey를 하나씩 확인하는 쿼리를 작성할 수 있지만 이미 이것을 수행 할 수있는 툴이있을 수 있다고 생각했습니다.
이미 스크립트가 있는지 확인하기 위해 스크립트를 작성하기 전에 확인합니다.
검색된 Google ... 놀랍게도 나는 아무 것도 발견하지 못했습니다. 데이터가 이미 당신이 부모를 삭제하는 FK 제약이나 폭포를 설정하지 않은 경우
'무효'란 무엇을 의미합니까? 고아 레코드? 더 이상 존재하지 않는 테이블을 가리키는 FK가있는 테이블? –
참조 무결성을 유지하기 위해 데이터베이스에서 자동으로이를 수행하고 (사용중인 DB 엔진에 따라 다름) CASCADE를 사용하도록 설정할 수 있습니다. –
stefans 덧글 이외에 아이를 무효화하거나 업데이트 할 수 있다는 점에 유의하십시오. 삭제하지 않아도됩니다. – TomDunning