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

MySQL 가상 생성 컬럼(GENERATED COLUMN)은 내장 함수와 어떻게 함께 작동할까?

MySQL 가상 생성 컬럼과 내장 함수의 동작 원리

MySQL의 가상 생성 컬럼(Virtual Generated Column)은 다른 컬럼의 값을 기반으로 내장 함수를 사용해 자동으로 계산되는 컬럼입니다. 이 컬럼은 디스크에 물리적으로 저장되지 않으며, 쿼리가 실행되는 시점에 매번 즉석에서 값이 산출됩니다.

가상 생성 컬럼은 VIRTUAL 키워드를 명시적으로 선언하거나, 키워드를 생략한 채 정의할 수도 있습니다. MySQL에서는 별도의 표기가 없으면 기본적으로 VIRTUAL 타입으로 생성되기 때문입니다.

예제: CONCAT 함수로 FULL_NAME 컬럼 만들기

다음 예제에서는 employee_data라는 테이블을 생성하고, First_nameLast_name을 결합하는 CONCAT 내장 함수를 활용해 FULL_NAME이라는 가상 생성 컬럼을 정의합니다.

mysql> Create table employee_data(ID INT AUTO_INCREMENT PRIMARY KEY,
        First_name VARCHAR(50) NOT NULL, Last_name VARCHAR(50) NOT NULL,
        FULL_NAME VARCHAR(90) GENERATED ALWAYS AS(CONCAT(First_name,'',Last_name)));
Query OK, 0 rows affected (0.55 sec)

테이블 구조를 확인해 보면 FULL_NAME 컬럼의 Extra 항목에 VIRTUAL GENERATED로 표시되어 있는 것을 알 수 있습니다. 이는 해당 컬럼이 저장되지 않고 가상으로 계산된다는 의미입니다.

mysql> DESCRIBE employee_data;
+------------+-------------+------+-----+---------+-------------------+
| Field      | Type        | Null | Key | Default | Extra             |
+------------+-------------+------+-----+---------+-------------------+
| ID         | int(11)     | NO   | PRI | NULL    | auto_increment    |
| First_name | varchar(50) | NO   |     | NULL    |                    |
| Last_name  | varchar(50) | NO   |     | NULL    |                    |
| FULL_NAME  | varchar(90) | YES  |     | NULL    | VIRTUAL GENERATED |
+------------+-------------+------+-----+---------+-------------------+
4 rows in set (0.00 sec)

데이터 삽입 및 결과 확인

이제 이름과 성만 입력하여 데이터를 삽입해 보겠습니다. FULL_NAME 컬럼에는 값을 직접 넣지 않아도 자동으로 계산됩니다.

mysql> INSERT INTO employee_data(first_name, Last_name) values('Yashpal','Sharma');
Query OK, 1 row affected (0.09 sec)

mysql> INSERT INTO employee_data(first_name, Last_name) values('Krishan','Kumar');
Query OK, 1 row affected (0.09 sec)

mysql> INSERT INTO employee_data(first_name, Last_name) values('Rakesh','Arora');
Query OK, 1 row affected (0.08 sec)

전체 데이터를 조회하면 FULL_NAME 컬럼에 두 컬럼이 결합된 값이 자동으로 채워져 있는 것을 확인할 수 있습니다.

mysql> Select * from employee_data;
+----+------------+-----------+----------------+
| ID | First_name | Last_name | FULL_NAME      |
+----+------------+-----------+----------------+
| 1  | Yashpal    | Sharma    | Yashpal Sharma |
| 2  | Krishan    | Kumar      | Krishan Kumar  |
| 3  | Rakesh     | Arora      | Rakesh Arora   |
+----+------------+-----------+----------------+
3 rows in set (0.00 sec)

정리

위 예제를 통해 확인할 수 있듯이, MySQL의 가상 생성 컬럼은 CONCAT 같은 내장 함수와 결합하여 원본 데이터를 중복 저장하지 않고도 파생 값을 손쉽게 관리할 수 있는 강력한 기능입니다. 저장 공간을 절약하면서도 조회 시점에 항상 최신 상태의 계산 결과를 제공하기 때문에, 이름 결합, 날짜 포맷 변환, 간단한 수식 처리 등 다양한 용도로 활용할 수 있습니다.