2014-03-31 6 views
1

:변환의 MyISAM 나는이 문 이노 디비에의 MyISAM에서 전체 데이터베이스를 변환하기 위해 노력하고있어

use information_schema; 

SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;') 
FROM information_schema.tables 
WHERE engine = "MyISAM" AND table_type = "BASE TABLE" AND table_schema = "database"; 

나는 결과를 얻을 수있는 동안 모든 테이블 예를 들어 변경됩니다 :

ALTER TABLE database.action ENGINE=InnoDB; 

테이블 엔진을 점검 할 때 여전히 MyISAM입니다. 이상하게도 명령을 별도로 실행하면

ALTER TABLE action ENGINE='InnoDB'; 

해당 테이블에서 정상적으로 작동합니다.

전체 데이터베이스를 변환하는 방법에 대한 정보는 무엇입니까?

+0

나는 이것을 보통 텍스트 편집기에서 표시하고 실행한다. 순수한 SQL로 처리하려고하면 좌절감을 느끼게됩니다. – tadman

답변

1

실행중인 SELECT 문만 문자열을 생성합니다. 생성하는 문자열은 SQL 문으로 실행되지 않습니다. 해당 쿼리에서 결과 집합을 가져와 실제로 이러한 문을 별도의 단계로 실행해야합니다.

+0

5 분 후에 똑같은 것을 찾았습니다. 귀하의 회신에 감사드립니다! 명확히하기 위해 단일 명령어로 모든 것을 실행할 수있는 방법이 없습니다. 리눅스에서 파이프처럼? – geolykos

+0

@geolykos : 아니요, 단일 SQL 문에서 실행할 수는 없습니다. 쿼리에서 결과 집합의 각 행을 문으로 실행해야합니다. 한 번만 촬영하려면 결과 세트를 텍스트 파일로 저장하십시오. 작은 응용 프로그램이나 MySQL 저장 프로그램 (프로 시저)을 작성하여 결과 집합을 반복하고 반환 된 각 행에 대해 별도의 명령문을 실행할 수 있습니다. – spencer7593