MySQL에서 기존에 MyISAM 엔진으로 생성된 테이블을 InnoDB로 변경하려면 ALTER TABLE 명령어를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 변환 과정을 단계별로 살펴보겠습니다.
1. MyISAM 엔진으로 테이블 생성하기
먼저 엔진을 명시적으로 MyISAM으로 지정하여 테이블을 생성해 보겠습니다.
mysql> create table DemoTable -> ( -> ClientId int NOT NULL AUTO_INCREMENT, -> ClientName varchar(100), -> ClientAge int, -> ClientCountryName varchar(100), -> isMarried boolean, -> PRIMARY KEY(ClientId) -> )ENGINE=MyISAM; Query OK, 0 rows affected (0.67 sec)
2. ALTER TABLE로 InnoDB로 변환하기
테이블의 스토리지 엔진을 변경하는 것은 매우 간단합니다. ALTER TABLE 문 뒤에 ENGINE=InnoDB를 지정하면 됩니다.
mysql> alter table DemoTable ENGINE=InnoDB; Query OK, 0 rows affected (1.97 sec) Records: 0 Duplicates: 0 Warnings: 0
명령이 성공적으로 실행되면 테이블이 InnoDB 엔진으로 변환됩니다. 데이터가 많은 테이블의 경우 변환 작업에 시간이 다소 걸릴 수 있으니 참고하세요.
3. 변환 결과 확인하기
변환이 제대로 적용되었는지 확인하려면 SHOW CREATE TABLE 문을 사용하여 테이블의 현재 정의를 조회합니다.
mysql> show create table DemoTable;
실행 결과는 다음과 같으며, 출력된 DDL 문에서 ENGINE이 InnoDB로 변경된 것을 확인할 수 있습니다.
+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | DemoTable | CREATE TABLE `DemoTable` (`ClientId` int(11) NOT NULL AUTO_INCREMENT, `ClientName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, `ClientAge` int(11) DEFAULT NULL, `ClientCountryName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, `isMarried` tinyint(1) DEFAULT NULL, PRIMARY KEY (`ClientId`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci | +--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
MyISAM과 InnoDB, 어떤 것을 선택해야 할까?
두 엔진의 주요 차이점을 알고 있으면 변환 여부를 결정하는 데 도움이 됩니다.
- 트랜잭션 지원: InnoDB는 ACID 트랜잭션을 완벽하게 지원하지만, MyISAM은 지원하지 않습니다.
- 외래 키(Foreign Key): InnoDB만 외래 키 제약 조건을 지원합니다.
- 충돌 복구: InnoDB는 크래시 발생 시 자동 복구 기능을 제공하여 데이터 안정성이 뛰어납니다.
- 행 수준 잠금(Row-level Locking): InnoDB는 행 단위 잠금을 사용해 동시성 처리에 유리한 반면, MyISAM은 테이블 전체 잠금만 지원합니다.
일반적으로 최신 MySQL 버전에서는 트랜잭션 처리와 데이터 무결성이 중요한 대부분의 애플리케이션에서 InnoDB를 기본 엔진으로 권장합니다.