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

MySQL 가상 생성 컬럼(VIRTUAL GENERATED COLUMN), 수학 표현식으로 활용하는 방법

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)과 차별화된 장점을 가집니다.