Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 MyISAM 테이블을 InnoDB로 변환하는 방법

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를 기본 엔진으로 권장합니다.