2014-06-13 1 views
0

내가 그들을 다른 하나의 데이터베이스에서 여러 테이블을 이동 및 보관을 시도하고 있지만, 아래 문으로 선택에 구문 오류와 함께 실패합니다프리픽스가있는 여러 테이블을 준비된 명령문을 사용하여 아카이브 데이터베이스로 이동하십시오. 왜이 MySQL 문은 유효하지 않습니까?

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@tbls ENGINE=archive RENAME @tbls.database_two' at line 1 

SELECT 문 구문이의 제안에 동일 수동으로 그리고 그것은 내가 대문자 오류 중 하나를 실행하는 것처럼 보이지 않습니다.

무엇이 누락 되었습니까?

SET GROUP_CONCAT_MAX_LEN=10000; 
SET @tbls = (
    SELECT GROUP_CONCAT(TABLE_NAME) 
    FROM information_schema.TABLES 
    WHERE TABLE_SCHEMA = 'database_one' 
    AND TABLE_NAME LIKE 'prefix_%' 
); 
SET @rnStmt = CONCAT('ALTER TABLE @tbls ENGINE=archive RENAME @tbls.database_two'); 
-- SELECT @rnStmt; 
PREPARE stmt FROM @rnStmt; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

MySQL은 5.1 에 CentOS 6.5

편집 : 복사 UPDATE

잘못된 오류 메시지 : 일부 진전, 선택 작품 그러나 나는 점점하지있어 sytax 검사 제작에 '없음 데이터베이스 선정' 준비 문.

SET GROUP_CONCAT_MAX_LEN=10000; 
SET @tbls = (
    SELECT GROUP_CONCAT(TABLE_NAME) 
    FROM information_schema.TABLES 
    WHERE TABLE_SCHEMA = 'database_one' 
    AND TABLE_NAME LIKE 'prefix_%' 
); 
SET @rnStmt = CONCAT('ALTER TABLE ', @tbls, ' ENGINE=archive RENAME database_two.', @tbls); 
PREPARE stmt FROM @rnStmt; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

USE와 몇 가지 다른 변형을 시도했지만 행운은 없습니다. 당신이 RENAME TABLE 문을 사용하고, 또한, 당신은 전체 현재 테이블 이름과 전체 새 테이블 이름을 수집해야 할 필요가있는 복수 테이블의

+0

누락') '''SELECT GROUP_CONCAT (TABLE_NAME' –

+0

당신이 이것들 중 하나가 필요합니다.) "(에러 메시지 종류가 그 것을 말했습니다) – Strawberry

+0

게시 오류 였고, Notepadd ++에서 문장을 생성하고 브라우저에 복사하려고합니다. 형식을 약간 짖는 소리. 같은 오류가 발생합니다. 변수 이름을 두 번 사용하고 있기 때문입니까? 허용되는지 확실하지 않습니다. – jbrain

답변

1

, 결과의 쿼리를 생성하고 실행 -

SELECT 
    GROUP_CONCAT(CONCAT('database_one.',TABLE_NAME)), 
    GROUP_CONCAT(CONCAT('database_two.',TABLE_NAME)) 
INTO 
    @from, @to 
FROM 
    information_schema.TABLES 
WHERE 
    TABLE_SCHEMA = 'database_one' AND TABLE_NAME LIKE 'prefix_%'; 

SET @rnStmt = CONCAT('RENAME TABLE ', @from, ' TO ', @to); 

PREPARE stmt FROM @rnStmt; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

이것은 훌륭합니다. 고마워요. 1 분 전에 엔진 사양을 제거하여 작동 시키려고했으나 일부 ​​의도하지 않은 결과가 발생하여 해결책으로 게시하지 않았습니다. – jbrain

+0

마지막 질문 하나. 여러 번 (100+) 테이블에서이 작업을 시도하여 아카이브로 변환하면 저장 프로 시저를 사용해야합니까? – jbrain

+0

> 보관소로 변환 - 의미 하시겠습니까? – Devart