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

MySQL 테이블 스토리지 엔진 변경 방법 – ALTER TABLE로 InnoDB 전환하기

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';

데이터 무결성: 엔진 변경 시 테이블이 재구성되므로, 대용량 테이블이라면 작업 전 반드시 백업을 수행하는 것이 좋습니다.