MySQL에서 테이블 열(컬럼)의 데이터 유형을 변경하고 싶다면 ALTER TABLE 문과 MODIFY 절을 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 varchar 타입의 열을 BIGINT 타입으로 변경하는 과정을 단계별로 살펴보겠습니다.
1단계: 테이블 생성하기
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
StudentId varchar(200) not null,
StudentName varchar(20),
StudentAge int,
StudentAddress varchar(20),
StudentCountryName varchar(20)
);
Query OK, 0 rows affected (0.73 sec)2단계: 테이블 구조 확인하기
테이블이 정상적으로 생성되었는지 확인하기 위해 DESC 명령어로 테이블 구조를 조회합니다.
mysql> desc DemoTable;
위 명령어를 실행하면 다음과 같은 결과가 출력됩니다.
+--------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------------+--------------+------+-----+---------+-------+ | StudentId | varchar(200) | NO | | NULL | | | StudentName | varchar(20) | YES | | NULL | | | StudentAge | int(11) | YES | | NULL | | | StudentAddress | varchar(20) | YES | | NULL | | | StudentCountryName | varchar(20) | YES | | NULL | | +--------------------+--------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
현재 StudentId 열은 varchar(200) 타입으로 정의되어 있는 것을 확인할 수 있습니다.
3단계: ALTER TABLE MODIFY로 데이터 유형 변경하기
이제 StudentId 열의 데이터 유형을 varchar에서 BIGINT로 변경하는 쿼리를 실행합니다.
mysql> alter table DemoTable modify StudentId BIGINT(10) UNSIGNED NOT NULL DEFAULT 0; Query OK, 0 rows affected (1.51 sec) Records: 0 Duplicates : 0 Warnings : 0
위 쿼리를 통해 StudentId 열의 데이터 유형이 varchar(200)에서 BIGINT(10) UNSIGNED로 성공적으로 변경되었습니다. 동시에 NOT NULL 제약 조건과 기본값(DEFAULT 0)도 함께 지정했습니다.
4단계: 변경 결과 확인하기
변경이 제대로 적용되었는지 다시 한번 테이블 구조를 조회해 보겠습니다.
mysql> desc DemoTable;
실행 결과는 다음과 같습니다.
+--------------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------------+---------------------+------+-----+---------+-------+ | StudentId | bigint(10) unsigned | NO | | 0 | | | StudentName | varchar(20) | YES | | NULL | | | StudentAge | int(11) | YES | | NULL | | | StudentAddress | varchar(20) | YES | | NULL | | | StudentCountryName | varchar(20) | YES | | NULL | | +--------------------+---------------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
StudentId 열의 Type이 bigint(10) unsigned로, Null 값이 NO로, Default가 0으로 변경된 것을 확인할 수 있습니다.
참고 사항
- 기존 데이터 주의: 이미 데이터가 들어 있는 열의 유형을 변경할 경우, 기존 값이 새로운 유형으로 변환될 수 없으면 오류가 발생하거나 데이터가 잘릴(truncate) 수 있습니다.
- MODIFY vs CHANGE: MODIFY는 열 이름을 그대로 유지하면서 속성만 변경할 때 사용하고, 열 이름까지 변경하려면 CHANGE 절을 사용해야 합니다.
- MySQL 8.0 이상: 표시 폭(display width)인 BIGINT(10)는 MySQL 8.0.17부터 더 이상 권장되지 않으므로, 단순히 BIGINT UNSIGNED로 작성하는 것이 좋습니다.