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

MySQL 테이블 열의 데이터 유형 변경 방법 – ALTER TABLE MODIFY 완벽 가이드

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로 작성하는 것이 좋습니다.