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

CREATE TABLE 문으로 MySQL 테이블에 여러 개의 가상 생성 컬럼(VIRTUAL GENERATED COLUMNS) 추가하기

MySQL에서는 하나의 테이블에 여러 개의 가상 생성 컬럼(virtual generated column)을 동시에 정의할 수 있습니다. CREATE TABLE 문을 작성할 때 각 컬럼마다 별도의 표현식을 지정해 주기만 하면 되며, 이는 아래 예제를 통해 쉽게 확인할 수 있습니다.

예제

다음 예제에서는 profit이라는 테이블을 생성하면서 두 개의 가상 생성 컬럼을 함께 정의합니다. 첫 번째 컬럼인 profitprice에서 cost를 뺀 값을 계산하고, 두 번째 컬럼인 price_revisedprice에서 2를 뺀 값을 계산합니다.

mysql> Create table profit(cost int, price int, profit int AS (price-cost), price_revised int AS (price-2));
Query OK, 0 rows affected (0.73 sec)

DESCRIBE 문으로 테이블 구조를 확인해 보면, 두 컬럼 모두 Extra 항목에 'VIRTUAL GENERATED'로 표시되어 있는 것을 알 수 있습니다.

mysql> Describe profit;
+---------------+---------+------+-----+---------+-------------------+
| Field         | Type    | Null | Key | Default | Extra             |
+---------------+---------+------+-----+---------+-------------------+
| cost          | int(11) | YES  |     | NULL    |                   |
| price         | int(11) | YES  |     | NULL    |                   |
| profit        | int(11) | YES  |     | NULL    | VIRTUAL GENERATED |
| price_revised | int(11) | YES  |     | NULL    | VIRTUAL GENERATED |
+---------------+---------+------+-----+---------+-------------------+
4 rows in set (0.00 sec)

이제 일반적인 INSERT 문을 사용해 costprice 값만 입력합니다. 생성 컬럼에는 직접 값을 넣을 수 없으며, 나머지 두 컬럼의 값은 자동으로 계산됩니다.

mysql> Insert into profit(Cost, Price) values(100,110);
Query OK, 1 row affected (0.04 sec)

mysql> Insert into profit(Cost, Price) values(200,220);
Query OK, 1 row affected (0.04 sec)

SELECT 문으로 데이터를 조회하면, 입력하지 않은 profitprice_revised 값이 표현식에 따라 자동으로 계산되어 출력되는 것을 확인할 수 있습니다.

mysql> Select * from profit;
+------+-------+--------+---------------+
| cost | price | profit | price_revised |
+------+-------+--------+---------------+
| 100  | 110   | 10     | 108           |
| 200  | 220   | 20     | 218           |
+------+-------+--------+---------------+
2 rows in set (0.00 sec)

가상 생성 컬럼의 특징

가상 생성 컬럼은 물리적으로 디스크에 저장되지 않고, 행을 읽을 때마다 정의된 표현식을 기준으로 실시간으로 계산됩니다. 따라서 저장 공간을 절약할 수 있지만, 조회 시점에 연산이 수행되므로 복잡한 표현식의 경우 성능에 영향을 줄 수 있습니다. 반면 STORED GENERATED 컬럼은 값을 물리적으로 저장하기 때문에 읽기 속도는 빠르지만 디스크 공간을 추가로 사용하게 됩니다.