2012-03-09 2 views
0

테이블을 생성하는 과정에서 우리 시스템에 충분히주의를 기울이지 않았으며 모든 테이블이 InnoDB 엔진으로 생성되었습니다. 우리가 몇 개의 열에 FULLTEXT 색인을 갖고 싶어하기 때문에 이것은 실제로 나쁘다.외래 키가있는 테이블에서 MySQL 변경 엔진

이제 변환하고 싶습니다. 필자가이 작업을 수행하는 동안 모든 테이블을 MyISAM으로 변환하여 앞으로 인덱스를 추가 할 열을 추가 할 경우 해당 옵션을 사용할 수 있습니다.

ALTER TABLE tableName1 Engine = MyISAM; 
ALTER TABLE tableName2 Engine = MyISAM; 

을 그러나, 나는, 나는 다음과 같은 오류 얻을 실행하려고 할 때 :

Error Code: 1217 Cannot delete or update a parent row: a foreign key constraint fails

당신이 짐작 했겠지만을, 우리가를 그래서 나는 다음 내 .SQL 파일을 가지고 우리 테이블의 외래 키. 내 스타일이 아니라 내 부서도 아니고 제 작성 스크립트도 아닙니다.

제 질문은 DB를 지우지 않고도이 테이블에서 엔진을 변경할 수 있습니까?

편집 :이 필요한 것으로 참고 데이터베이스의 여러 개발 및 테스트 사본에서 수행하는, 그래서 뭔가가 나는 스크립트는 확실히 선호 될 수있다.

+0

이 응용 프로그램의 파괴없이 FKS를 제거 할 수 있습니까? 또는 전체 텍스트 인덱싱을 위해 Solr과 같은 것을 구현하십시오. – ceejayoz

+0

@ceejayoz FK를 제거하는 것은 옵션이지만 많은 테이블을 가지고 있기 때문에 내가 원하는 것은 아닙니다. 각 테이블을 살펴보고 외래 키를 찾아 수동으로 삭제해야합니다. 그리고 이것은 여러 개의 dev 및 테스트 서버에 걸쳐있을 것입니다. 나는 그것을 할 필요없이 그것을 할 수있는 방법을 원합니다. 또한 Solr은 실제로 옵션이 아닙니다. – Ktash

+0

단순한 해결책을 찾고 있다면 실망 할 것입니다. – ceejayoz

답변

0

글쎄, 내 지식에, 일종의 아니지만 정말. 데이터베이스를 mysqldump하고 덤프 된 sql 파일의 외래 키 제약 조건을 편집한다. 물론 CREATE TABLE 스크립트에서 엔진을 변경하십시오.

+0

그건 제가 생각한 옵션이지만, 여러 데이터베이스에서이 작업을 수행해야하므로 스크립트 할 수있는 것이 좋습니다. – Ktash

0

InnoDB는 MyISAM 지원 외래 키와 달리 모든 테이블에서 무결성을 보장하는 트랜잭션 시스템과 같은 많은 기능을 가지고 있습니다. MyISAM 테이블은 테이블에 많은 데이터가 있거나 다른 많은 이유로 인해 실패하는 경향이있다.
InnoDB는 가까운 장래에 FullText 검색을 구현할 것입니다. 나는 테이블의 엔진을 바꾸지 않고 스핑크스와 같은 것을 사용하는 것이 좋습니다. Sphinx는 InnoDB에서 사용되는 Fulltext Search보다 훨씬 강력하고 융통성이 있습니다.

이노에서 전체 텍스트 검색에 대한 자세한 :
InnoDB Fulltext search

+0

스핑크스는 옵션이 아닙니다. 내 호스트는 장기 실행 또는 항상 실행중인 프로세스를 허용하지 않습니다. – Ktash

관련 문제