2012-08-23 5 views
1

인덱스를 제외하고 모두 똑같은 구조를 공유하는 250 개 정도의 테이블 (mysql)이 있습니다. 테이블 중 하나가 현재의 정확한 최신 인덱스를 모두 가지고 있으며 인덱스 구조를 다른 249 개의 테이블로 전파하려고합니다.하나의 동일한 테이블에서 다른 기존의 동일한 테이블로 인덱스를 복사하는 방법

내가 찾은 모든 내용은 콘텐츠 및 색인 구조가있는 표를 복사하는 것입니다.이 표는 각 표의 데이터가 다르거 나 구조 만 동일하거나 새로운 구조를 만드는 것입니다. 나도하고 싶지 않은 같은 구조의 테이블.

ALTER TABLE을 사용하여 올바른 테이블의 테이블 구조를 모방하고 다른 테이블에 적용하고, 테이블을 최적화 한 다음 PHP 스크립트를 통해 이러한 명령을 적용하여 적용하도록하는 방법이 필요합니다. 모든 249 테이블에 있지만이 작업을 수행 할 ALTER TABLE 명령이 있는지 확인할 수 없습니다.

팁이 있습니까?

+1

"250 개가 넘는 테이블 (mysql)은 모두 똑같은 구조를 공유합니다."... 오, nooooooooooo! –

+0

아니요, 자동으로 수행하는 MySQL 명령이 없습니다. 누군가가 들어야 할 상황이 아니기 때문에. –

답변

1

"양호"테이블에서 SHOW CREATE TABLE [table_name]을 실행하십시오. 인덱스 행을 복사 한 후 스크립트에서 사용하여 다른 모든 테이블에 대해 ALTER TABLE CREATE INDEX을 실행하십시오.

완전히 자동화하려면 SHOW INDEXES 또는 SHOW CREATE TABLE 호출에서 색인 정의를 구문 분석해야합니다. 그러나 나는 이상한 상황이므로 한번만 실행해야한다고 가정하고 있습니다.

2

CREATE TABLE LIKE 명령을 사용하여 올바른 구조 + 인덱스는 있지만 데이터는없는 새 테이블을 만든 다음 INSERT 문을 사용하여 이전 데이터를 복사 할 수 있습니다.

예를 들어 올바른 색인이있는 테이블로 users_master이 있고이를 users_n 테이블에 올바른 인덱스로 제공하려고한다고 가정합니다. 우리는 이렇게 할 수 있습니다 :

CREATE TABLE users_n_indexed LIKE users_master; 
INSERT users_n_indexed SELECT * FROM users_n; 
DROP TABLE users_n; 
RENAME TABLE users_n_indexed users_n; 

물론 DROP 문을 실행하기 전에 백업을 작성하십시오.

+0

이 답변에 조금을 추가하기 만하면 나는이 문제에 걸림돌이되는 사람들을 위해 새로운 대답을 제출할 것입니다. – Jeremie

0

제레미의 위대한 답. 이런 경우에 MySQL은

CREATE TABLE users_n_indexed LIKE users_master; 
INSERT users_n_indexed SELECT * FROM users_master; 
DROP TABLE users_n; 
RENAME TABLE users_n_indexed TO users_n; 

당신은 제거 'TABLE 문에 추가 할 필요가 뿌려줍니다.

관련 문제