MySQL에서 가상 생성 컬럼(Virtual Generated Column)은 다른 컬럼 값을 기반으로 한 수학 표현식이나 계산식을 자동으로 처리할 수 있는 강력한 기능입니다. 이번 글에서는 'triangle'이라는 테이블에 가상 생성 컬럼을 만드는 예제를 통해 그 동작 방식을 살펴보겠습니다.
가상 생성 컬럼의 기본 개념
가상 생성 컬럼은 컬럼 정의 시 VIRTUAL 키워드를 명시적으로 사용하거나, 생략하고 정의할 수 있습니다. 키워드를 생략하면 MySQL이 기본적으로 VIRTUAL 방식으로 컬럼을 생성합니다. 가상 생성 컬럼의 값은 물리적으로 저장되지 않고, 쿼리가 실행될 때마다 표현식을 통해 실시간으로 계산됩니다.
예제: 삼각형 빗변 계산하기
아래 예제에서는 두 변(SideA, SideB)의 값으로부터 세 번째 변(SideC)을 제곱근 공식으로 자동 계산하는 가상 생성 컬럼을 만들어 보겠습니다.
mysql> Create table triangle(SideA DOUBLE, SideB DOUBLE, SideC DOUBLE AS (SQRT(SideA * SideB + SideB * SideB))); Query OK, 0 rows affected (0.44 sec) mysql> Describe Triangle; +-------+--------+------+-----+---------+-------------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------+------+-----+---------+-------------------+ | SideA | double | YES | | NULL | | | SideB | double | YES | | NULL | | | SideC | double | YES | | NULL | VIRTUAL GENERATED | +-------+--------+------+-----+---------+-------------------+ 3 rows in set (0.00 sec)
DESCRIBE 결과를 보면 SideC 컬럼의 Extra 항목에 VIRTUAL GENERATED로 표시되어 있습니다. 이는 해당 컬럼이 가상 생성 컬럼임을 의미합니다.
데이터 삽입 및 자동 계산 확인
이제 SideA와 SideB에 값만 삽입해 보겠습니다. SideC에는 직접 값을 넣지 않아도 MySQL이 표현식에 따라 자동으로 계산합니다.
mysql> INSERT INTO triangle(SideA, SideB) Values(1,1),(3,4),(6,8); Query OK, 3 rows affected (0.15 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> Select * from triangle; +-------+-------+--------------------+ | SideA | SideB | SideC | +-------+-------+--------------------+ | 1 | 1 | 1.4142135623730951 | | 3 | 4 | 5.291502622129181 | | 6 | 8 | 10.583005244258363 | +-------+-------+--------------------+ 3 rows in set (0.03 sec)
결과 분석
삽입된 각 행에서 SideC 값은 다음과 같이 계산되었습니다.
- (1, 1) → √(1×1 + 1×1) = √2 ≈ 1.4142135623730951
- (3, 4) → √(3×4 + 4×4) = √28 ≈ 5.291502622129181
- (6, 8) → √(6×8 + 8×8) = √112 ≈ 10.583005244258363
이처럼 가상 생성 컬럼을 활용하면 애플리케이션 코드에서 별도로 계산 로직을 구현하지 않아도 되며, 데이터 일관성을 유지하면서 파생 값을 손쉽게 관리할 수 있습니다. 또한 저장 공간을 추가로 사용하지 않는다는 점에서 저장 생성 컬럼(Stored Generated Column)과 차별화된 장점을 가집니다.