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

MySQL 저장 생성 컬럼(Stored Generated Column)이 내장 함수와 함께 작동하는 방법

MySQL에서 저장 생성 컬럼(Stored Generated Column)은 내장 함수를 활용하여 다른 컬럼의 값을 기반으로 자동으로 계산된 값을 저장하는 강력한 기능입니다. 일반 가상 생성 컬럼(VIRTUAL Generated Column)과 달리, 저장 생성 컬럼은 데이터가 실제로 디스크에 저장되므로 조회 시 계산 오버헤드가 없다는 장점이 있습니다.

저장 생성 컬럼의 정의 방법

저장 생성 컬럼을 만들려면 컬럼 정의 시 GENERATED ALWAYS AS() 절과 함께 STORED 키워드를 사용하면 됩니다. 아래 예제는 'employee_data_stored'라는 테이블을 생성하면서, First_name과 Last_name 컬럼을 결합하여 FULL_NAME 컬럼을 자동으로 생성하도록 설정한 것입니다.

테이블 생성 예제

mysql> Create table employee_data_stored(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)) STORED);
Query OK, 0 rows affected (0.52 sec)

위 쿼리에서 핵심 부분은 FULL_NAME VARCHAR(90) GENERATED ALWAYS AS(CONCAT(First_name,' ',Last_name)) STORED입니다. MySQL의 내장 문자열 함수인 CONCAT()을 사용하여 이름과 성을 공백으로 연결한 값이 FULL_NAME 컬럼에 저장됩니다.

테이블 구조 확인

생성된 테이블의 구조를 DESCRIBE 명령어로 확인해 보면, FULL_NAME 컬럼의 Extra 항목에 'STORED GENERATED'로 표시되는 것을 확인할 수 있습니다.

mysql> DESCRIBE employee_data_stored;
+------------+-------------+------+-----+---------+------------------+
| 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    | STORED GENERATED |
+------------+-------------+------+-----+---------+------------------+
4 rows in set (0.00 sec)

데이터 삽입 및 결과 확인

흥미로운 점은 INSERT 문 실행 시 First_name과 Last_name 값만 입력하면 된다는 것입니다. FULL_NAME 값은 직접 입력하지 않아도 MySQL이 자동으로 계산하여 저장합니다.

mysql> INSERT INTO employee_data_stored(first_name, Last_name) values('Gaurav','Kumar');
Query OK, 1 row affected (0.04 sec)

mysql> INSERT INTO employee_data_stored(first_name, Last_name) values('Raman','Singh');
Query OK, 1 row affected (0.09 sec)

mysql> Select * from employee_data_stored;
+----+------------+-----------+--------------+
| ID | First_name | Last_name | FULL_NAME    |
+----+------------+-----------+--------------+
| 1  | Gaurav     | Kumar     | Gaurav Kumar |
| 2  | Raman      | Singh     | Raman Singh  |
+----+------------+-----------+--------------+
2 rows in set (0.00 sec)

정리

위 예제에서 확인할 수 있듯이, 저장 생성 컬럼은 CONCAT()과 같은 내장 함수와 함께 사용될 때 매우 유용합니다. First_name과 Last_name에 새로운 행이 삽입될 때마다 FULL_NAME 컬럼에는 두 값이 결합된 완전한 이름이 자동으로 저장됩니다. 이러한 방식은 애플리케이션 레벨에서 중복 로직을 줄이고 데이터 일관성을 보장하는 데 큰 도움이 됩니다.