내가 ALTER를 싫어한다는 말로 시작하겠습니다. 사악하다, IMHO.
현재 테이블 스키마입니다.
CREATE TABLE my_table_of_love (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
my_value VARCHAR(40),
date_created DATE,
PRIMARY KEY(id)
) ENGINE=MyISAM CHARSET=utf8;
추천하는 경로는 다음과 같습니다.
이전 테이블 오브젝트를 대체 할 새 테이블 오브젝트를 작성하십시오.
CREATE TABLE my_table_of_love_NEW (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
my_value VARCHAR(40),
date_created DATE,
PRIMARY KEY(id)
) ENGINE=InnoDB CHARSET=utf8
이전 테이블의 모든 행을 이름별로 새 테이블에 삽입하십시오.
INSERT INTO my_table_of_love_NEW (id,my_value,date_created)
SELECT id,my_value,date_created FROM my_table_of_love;
마이그레이션 연기 테스트 :
SELECT COUNT(*) FROM my_table_of_love_NEW;
SELECT COUNT(*) FROM my_table_of_love;
SELECT a.id,a.my_value,a.date_created FROM my_table_of_love_NEW a
LEFT JOIN my_table_of_love b ON (b.id = a.id)
WHERE a.my_value != b.my_value;
롤백해야 할 경우 백업을 유지할 수 있도록 테이블 이름을 교체하십시오.
RENAME TABLE my_table_of_love TO my_table_of_love_OLD;
RENAME TABLE my_table_of_love_NEW TO my_table_of_love;
회귀 테스트로 진행하십시오.
이 방법은 여러 인덱스와 수백만 행이있는 테이블에서 점점 더 선호됩니다.
생각?