MySQL에서는 하나의 테이블에 여러 개의 저장 생성 컬럼(STORED GENERATED COLUMN)을 동시에 추가하는 것이 충분히 가능합니다. 생성 컬럼은 다른 컬럼 값을 기반으로 자동으로 계산되는 컬럼으로, STORED 옵션을 사용하면 계산 결과가 실제로 디스크에 저장됩니다.
아래 예제를 통해 두 개 이상의 저장 생성 컬럼을 포함한 테이블을 만드는 방법을 살펴보겠습니다.
예제: 여러 개의 STORED GENERATED COLUMN 정의하기
다음 CREATE TABLE 문은 profit1이라는 테이블을 생성하면서, profit과 price_revised라는 두 개의 저장 생성 컬럼을 함께 정의합니다.
mysql> Create table profit1(cost int, price int, profit int AS (price-cost) STORED, price_revised int AS (price-2) STORED); Query OK, 0 rows affected (0.36 sec)
테이블 구조 확인
DESCRIBE 명령어로 테이블 구조를 확인하면, 두 생성 컬럼 모두 Extra 항목에 STORED GENERATED로 표시되는 것을 볼 수 있습니다.
mysql> Describe profit1; +---------------+---------+------+-----+---------+------------------+ | Field | Type | Null | Key | Default | Extra | +---------------+---------+------+-----+---------+------------------+ | cost | int(11) | YES | | NULL | | | price | int(11) | YES | | NULL | | | profit | int(11) | YES | | NULL | STORED GENERATED | | price_revised | int(11) | YES | | NULL | STORED GENERATED | +---------------+---------+------+-----+---------+------------------+ 4 rows in set (0.00 sec)
데이터 삽입 및 조회
생성 컬럼에는 값을 직접 삽입할 수 없습니다. 대신 일반 컬럼인 cost와 price에만 데이터를 입력하면, 나머지 두 컬럼은 정의된 표현식에 따라 자동으로 계산되어 저장됩니다.
mysql> Insert into profit1(Cost, Price) values(100,110); Query OK, 1 row affected (0.09 sec) mysql> Insert into profit1(Cost, Price) values(200,220); Query OK, 1 row affected (0.09 sec) mysql> Select * from profit1; +------+-------+--------+---------------+ | cost | price | profit | price_revised | +------+-------+--------+---------------+ | 100 | 110 | 10 | 108 | | 200 | 220 | 20 | 218 | +------+-------+--------+---------------+ 2 rows in set (0.00 sec)
결과 분석
- profit 컬럼:
(price - cost)표현식에 따라 계산됩니다. 첫 번째 행은 110 − 100 = 10, 두 번째 행은 220 − 200 = 20이 저장되었습니다. - price_revised 컬럼:
(price - 2)표현식에 따라 계산됩니다. 첫 번째 행은 110 − 2 = 108, 두 번째 행은 220 − 2 = 218이 저장되었습니다.
이처럼 CREATE TABLE 문에서 각 생성 컬럼마다 AS (표현식) STORED 구문을 반복해서 작성하면, 하나의 테이블에 원하는 만큼 여러 개의 저장 생성 컬럼을 손쉽게 정의할 수 있습니다.