테이블 구조 변경
이 단계에서는 ALTER TABLE 명령을 사용하여 기존 테이블을 수정하는 방법을 배웁니다. 이는 데이터 요구 사항이 시간이 지남에 따라 변경될 때 일반적인 작업입니다.
새 열을 추가하고 기존 열을 수정하기 위해 products 테이블을 수정해 보겠습니다.
- 새 열 추가:
ALTER TABLE products
ADD COLUMN manufacturer VARCHAR(100) AFTER name;
이 명령은 name 열 뒤에 manufacturer라는 새 열을 추가합니다.
- 기존 열 수정:
ALTER TABLE products
MODIFY COLUMN description VARCHAR(500) NOT NULL DEFAULT 'No description available';
이 명령은 description 열을 최대 길이가 500 자인 가변 길이 문자열로 변경합니다. 또한 새 행에 대해 'No description available'의 기본값을 설정합니다.
- 열 이름 변경:
ALTER TABLE products
CHANGE COLUMN weight product_weight DECIMAL(8,2);
이 명령은 weight 열의 이름을 product_weight로 바꾸고 데이터 유형을 총 8 자리와 소수점 2 자리가 있는 10 진수로 변경합니다.
- 열 삭제:
ALTER TABLE products
DROP COLUMN in_stock;
이 명령은 테이블에서 in_stock 열을 제거합니다.
쿼리 성능을 향상시키기 위해 복합 인덱스를 추가해 보겠습니다.
ALTER TABLE products
ADD INDEX idx_name_manufacturer (name, manufacturer);
이 명령은 name 및 manufacturer 열에 복합 인덱스를 생성합니다.
변경 사항을 모두 보려면 다음을 수행합니다.
DESCRIBE products;
SHOW INDEX FROM products;
업데이트된 테이블 구조와 인덱스가 표시됩니다.
MariaDB [store]> DESCRIBE products;
+----------------+---------------+------+-----+--------------------------+-------------------------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------+------+-----+--------------------------+-------------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | MUL | NULL | |
| manufacturer | varchar(100) | YES | | NULL | |
| price | decimal(10,2) | NO | | NULL | |
| description | varchar(500) | NO | | No description available | |
| product_weight | decimal(8,2) | YES | | NULL | |
| created_at | datetime | YES | | current_timestamp() | |
| last_updated | timestamp | NO | | current_timestamp() | on update current_timestamp() |
+----------------+---------------+------+-----+--------------------------+-------------------------------+
8 rows in set (0.001 sec)
MariaDB [store]> SHOW INDEX FROM products;
+----------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Ignored |
+----------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| products | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | NO |
| products | 1 | idx_name_manufacturer | 1 | name | A | 0 | NULL | NULL | | BTREE | | | NO |
| products | 1 | idx_name_manufacturer | 2 | manufacturer | A | 0 | NULL | NULL | YES | BTREE | | | NO |
+----------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
3 rows in set (0.000 sec)