MySQL에서 기존 테이블에 새로운 컬럼과 해당 컬럼의 인덱스를 한 번의 쿼리로 동시에 추가하려면 ALTER TABLE 문과 ADD 절을 활용하면 됩니다.
기본 문법
ALTER TABLE yourTableName
ADD yourColumnName DATETIME DEFAULT NOW(),
ADD INDEX(yourColumnName);
위 문법처럼 ADD 절을 여러 번 사용해 컬럼 추가와 인덱스 생성 작업을 하나의 쿼리로 처리할 수 있습니다.
예제 테이블 생성
먼저 실습용 테이블을 만들어 보겠습니다.
mysql> CREATE TABLE DemoTable
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(100),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.69 sec)
테이블 구조 확인
DESC 명령으로 테이블 구조를 확인해 보겠습니다.
mysql> DESC DemoTable;
출력 결과
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(100) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
현재 테이블에는 Id와 Name 두 개의 컬럼만 존재합니다.
컬럼과 인덱스 동시 추가하기
이제 단일 쿼리로 ArrivalDate라는 DATETIME 타입의 컬럼과 그에 대한 인덱스를 동시에 추가해 보겠습니다.
mysql> ALTER TABLE DemoTable
-> ADD ArrivalDate DATETIME DEFAULT NOW(),
-> ADD INDEX(ArrivalDate);
Query OK, 0 rows affected (2.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
쿼리가 성공적으로 실행되었습니다. 이제 변경된 테이블 구조를 다시 확인해 보겠습니다.
mysql> DESC DemoTable;
출력 결과
+-------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+-------------------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(100) | YES | | NULL | |
| ArrivalDate | datetime | YES | MUL | CURRENT_TIMESTAMP | |
+-------------+--------------+------+-----+-------------------+----------------+
3 rows in set (0.01 sec)
결과 분석
출력 결과를 보면 다음과 같은 변화를 확인할 수 있습니다.
1. 새 컬럼 추가: ArrivalDate 컬럼이 datetime 타입으로 추가되었으며, 기본값(Default)이 CURRENT_TIMESTAMP로 설정되어 있습니다. 즉, 별도의 값을 지정하지 않으면 레코드가 삽입되는 시점의 현재 시간이 자동으로 저장됩니다.
2. 인덱스 생성: Key 항목이 MUL로 표시된 것을 알 수 있습니다. MUL은 해당 컬럼이 인덱스의 첫 번째 컬럼이거나 유니크하지 않은 인덱스로 지정되었음을 의미합니다.
이처럼 ALTER TABLE 문 하나만으로 컬럼 추가와 인덱스 생성을 동시에 처리할 수 있어, 데이터베이스 스키마 변경 작업을 더욱 효율적으로 수행할 수 있습니다.