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

데이터 손실 없이 MySQL 테이블의 열 위치를 변경하는 방법 (ALTER TABLE 활용)

MySQL에서는 ALTER TABLE 명령어를 사용하면 저장된 데이터를 하나도 잃지 않고 테이블 내 열(column)의 위치를 자유롭게 변경할 수 있습니다. 이 작업은 기존 레코드에는 아무런 영향을 주지 않으며, SELECT 문으로 조회할 때 열이 출력되는 순서만 바뀌게 됩니다.

기본 문법

열의 위치를 변경하는 기본 문법은 다음과 같습니다.

ALTER TABLE yourTableName MODIFY yourColumnName1 data type AFTER yourColumnName2;

즉, 이동시키고 싶은 열 이름과 해당 열의 데이터 타입을 그대로 지정한 뒤, AFTER 키워드로 어느 열 뒤로 이동할지를 지정하면 됩니다. 참고로 열을 테이블의 가장 앞으로 옮기고 싶다면 AFTER 대신 FIRST 키워드를 사용하면 됩니다.

예제 테이블 생성

개념을 이해하기 위해 몇 개의 열을 가진 테이블을 먼저 만들어 보겠습니다.

mysql> create table changeColumnPositionDemo
-> (
-> StudentId int,
-> StudentAddress varchar(200),
-> StudentAge int,
-> StudentName varchar(200)
-> );
Query OK, 0 rows affected (0.72 sec)

생성된 테이블의 열 순서는 StudentId → StudentAddress → StudentAge → StudentName 입니다.

샘플 데이터 삽입

이제 테이블에 테스트용 레코드를 몇 개 삽입합니다.

mysql> insert into changeColumnPositionDemo values(101,'US',23,'Johnson');
Query OK, 1 row affected (0.13 sec)

mysql> insert into changeColumnPositionDemo values(102,'UK',20,'John');
Query OK, 1 row affected (0.19 sec)

mysql> insert into changeColumnPositionDemo values(103,'US',22,'Carol');
Query OK, 1 row affected (0.39 sec)

mysql> insert into changeColumnPositionDemo values(104,'UK',19,'Sam');
Query OK, 1 row affected (0.18 sec)

변경 전 데이터 확인

SELECT 문으로 현재 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select *from changeColumnPositionDemo;

실행 결과는 다음과 같습니다.

+-----------+----------------+------------+-------------+
| StudentId | StudentAddress | StudentAge | StudentName |
+-----------+----------------+------------+-------------+
|       101 | US             | 23         | Johnson     |
|       102 | UK             | 20         | John        |
|       103 | US             | 22         | Carol       |
|       104 | UK             | 19         | Sam         |
+-----------+----------------+------------+-------------+
4 rows in set (0.00 sec)

열 위치 변경하기

아래는 데이터 손실 없이 열 위치를 변경하는 쿼리입니다. 여기서는 StudentAddress 열을 StudentAge 열 뒤로 이동시켜 보겠습니다.

mysql> ALTER TABLE changeColumnPositionDemo MODIFY StudentAddress varchar(200) AFTER StudentAge;
Query OK, 0 rows affected (2.27 sec)
Records: 0 Duplicates: 0 Warnings: 0

위 쿼리를 통해 StudentAddress 열이 StudentAge 열 뒤로 이동했습니다. 주의할 점은 MODIFY 사용 시 원래 열의 데이터 타입(varchar(200))을 반드시 함께 명시해야 한다는 것입니다.

변경 결과 확인

두 열의 순서가 실제로 변경되었고 데이터가 그대로 유지되었는지 다시 조회해 확인해 보겠습니다.

mysql> select *from changeColumnPositionDemo;

실행 결과는 다음과 같습니다.

+-----------+------------+----------------+-------------+
| StudentId | StudentAge | StudentAddress | StudentName |
+-----------+------------+----------------+-------------+
|       101 | 23         | US             | Johnson     |
|       102 | 20         | UK             | John        |
|       103 | 22         | US             | Carol       |
|       104 | 19         | UK             | Sam         |
+-----------+------------+----------------+-------------+
4 rows in set (0.00 sec)

출력 결과를 보면 StudentAddress 열이 StudentAge 열 뒤로 이동했음을 확인할 수 있으며, 모든 레코드의 값은 변경 전과 완전히 동일하게 유지되었습니다. 이처럼 ALTER TABLE ... MODIFY ... AFTER 구문을 활용하면 안전하게 열 순서를 재배치할 수 있습니다.