MySQL에서 이미 생성된 테이블의 스토리지 엔진을 변경해야 하는 경우가 종종 있습니다. 예를 들어, 기존에 MyISAM으로 만든 테이블을 트랜잭션 지원과 외래 키 제약 조건이 가능한 InnoDB로 전환하고 싶다면 ALTER TABLE 문 하나만으로 간단하게 처리할 수 있습니다.
기본 문법
테이블의 스토리지 엔진을 변경하는 기본 문법은 다음과 같습니다.
ALTER TABLE yourTableName ENGINE=InnoDB;
ENGINE 뒤에 원하는 스토리지 엔진 이름(InnoDB, MyISAM, MEMORY 등)을 지정하면 됩니다. 이제 실제 예제를 통해 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 MyISAM 엔진을 사용하는 테이블을 생성합니다. AUTO_INCREMENT 시작 값도 함께 101로 지정했습니다.
mysql> create table DemoTable
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20),
-> StudentAge int,
-> StudentCountryName varchar(20)
-> )ENGINE=MyISAM,AUTO_INCREMENT=101;
Query OK, 0 rows affected (0.18 sec)2단계: 현재 엔진 확인
테이블 구조와 현재 적용된 스토리지 엔진을 확인하려면 SHOW CREATE TABLE 명령을 사용합니다.
mysql> show create table DemoTable;
실행 결과는 다음과 같습니다. 출력 하단에 ENGINE=MyISAM이 표시되는 것을 확인할 수 있습니다.
+---------------+-----------------------------------------------------------------------------------------+ | Table | Create Table | +---------------+-----------------------------------------------------------------------------------------+ | DemoTable | CREATE TABLE `DemoTable` ( `StudentId` int(11) NOT NULL AUTO_INCREMENT, `StudentName` | | | varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, `StudentAge` int(11) DEFAULT NULL, | | | `StudentCountryName` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY | | | (`StudentId`) ) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=utf8 | | | COLLATE=utf8_unicode_ci | +---------------+------------------------------------------------------------------------------------------+ 1 row in set (0.50 sec)
3단계: 스토리지 엔진 변경
이제 ALTER TABLE 문을 사용하여 DemoTable의 엔진을 InnoDB로 변경합니다.
mysql> alter table DemoTable ENGINE=InnoDB; Query OK, 0 rows affected (1.21 sec) Records: 0 Duplicates: 0 Warnings: 0
쿼리가 정상적으로 실행되면 "Query OK" 메시지가 출력됩니다. 테이블 크기에 따라 변경 작업에 걸리는 시간이 달라질 수 있다는 점에 유의하세요.
4단계: 변경 결과 확인
다시 한번 SHOW CREATE TABLE 명령으로 변경 사항이 적용되었는지 확인합니다.
mysql> show create table DemoTable;
출력 결과를 보면 엔진이 ENGINE=InnoDB로 성공적으로 변경된 것을 확인할 수 있습니다.
+---------------+-----------------------------------------------------------------------------------------+ | Table | Create Table | +---------------+-----------------------------------------------------------------------------------------+ | DemoTable | CREATE TABLE `DemoTable` ( `StudentId` int(11) NOT NULL AUTO_INCREMENT, `StudentName` | | | varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, `StudentAge` int(11) DEFAULT NULL, | | | `StudentCountryName` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY | | | (`StudentId`) ) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8 | | | COLLATE=utf8_unicode_ci | +---------------+------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
참고 사항
엔진을 변경하기 전에 몇 가지 주의할 점이 있습니다.
InnoDB vs MyISAM: InnoDB는 ACID 트랜잭션, 행 수준 잠금(Row-level Locking), 외래 키(Foreign Key)를 지원하는 반면, MyISAM은 읽기 위주의 작업에서 빠른 성능을 보이지만 트랜잭션을 지원하지 않습니다. 대부분의 최신 애플리케이션에서는 InnoDB가 기본 선택입니다.
전체 테이블 목록 확인: 데이터베이스 내 모든 테이블의 엔진을 한눈에 확인하려면 다음 쿼리를 사용할 수 있습니다.
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'yourDatabaseName';
데이터 무결성: 엔진 변경 시 테이블이 재구성되므로, 대용량 테이블이라면 작업 전 반드시 백업을 수행하는 것이 좋습니다.