단일 쿼리로 열과 인덱스 동시에 추가하기
MySQL에서 기존 테이블에 새 열(column)을 추가할 때는 ADD 절을 사용하고, 새 인덱스를 추가할 때는 ADD INDEX() 구문을 사용합니다. 특히 ALTER TABLE 문 하나에 여러 작업을 쉼표로 구분하여 나열하면 단일 쿼리만으로 두 가지 작업을 동시에 처리할 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
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)
새 열과 인덱스를 함께 추가하는 쿼리
아래 쿼리는 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)
출력 결과에서 ArrivalDate 열의 Key 값이 MUL로 표시되어 있는 것을 확인할 수 있습니다. 이는 해당 열에 인덱스가 성공적으로 생성되었음을 의미합니다. 또한 Default 값이 CURRENT_TIMESTAMP로 설정되어 있어, 별도의 값을 지정하지 않고 행을 삽입하면 현재 시간이 자동으로 저장됩니다. 이처럼 ALTER TABLE 문 하나에 여러 작업을 쉼표로 연결하면 테이블 구조 변경 작업을 효율적으로 처리할 수 있습니다.