[MySQL] 계산결과를 자동처리 해주는 VIRTUAL와 STORED의 차이점
VIRTUAL 키 사용 안되는줄 알았는데 테스트 해보니 키저장이 됩니다. 단 값은 저장이 안되네요
그리고 자동으로 계산된 결과를 사용하기 때문에 지정된 값은 저장이 되질 않습니다.
CREATE TABLE 파뿌리.판매_기록 (
id INT AUTO_INCREMENT,
상품코드 VARCHAR(7) NOT NULL,
상품명 VARCHAR(32) NOT NULL,
가격 INT NOT NULL comment '할인 되면 할인가격',
수량 INT NOT NULL,
판매금액 INT AS (가격 * 수량) STORED,
비고 TEXT,
판매일 DATETIME DEFAULT CURRENT_TIMESTAMP,
primary key (id ),
index(판매금액)
) comment='판매 기록';
insert into 판매_기록 (상품코드,상품명,가격,수량) values (11, '윗도리',20, 30);
insert into 판매_기록 (상품코드,상품명,가격,수량) values (11, '윗도리',20, 40);
insert into 판매_기록 (상품코드,상품명,가격,수량,판매금액) values (11, '윗도리',20, 40, 900);
mysql> select * from 판매_기록;
+----+--------------+-----------+--------+--------+--------------+--------+---------------------+
| id | 상품코드 | 상품명 | 가격 | 수량 | 판매금액 | 비고 | 판매일 |
+----+--------------+-----------+--------+--------+--------------+--------+---------------------+
| 1 | 11 | 윗도리 | 20 | 30 | 600 | NULL | 2025-02-02 16:27:49 |
| 2 | 11 | 윗도리 | 20 | 40 | 800 | NULL | 2025-02-02 16:27:59 |
| 3 | 11 | 윗도리 | 20 | 40 | 800 | NULL | 2025-02-02 16:39:05 |
+----+--------------+-----------+--------+--------+--------------+--------+---------------------+
CREATE TABLE 판매_기록2 (
id INT AUTO_INCREMENT,
상품코드 VARCHAR(7) NOT NULL,
상품명 VARCHAR(32) NOT NULL,
가격 INT NOT NULL comment '할인 되면 할인가격',
수량 INT NOT NULL,
판매금액 INT AS (가격 * 수량) VIRTUAL,
비고 TEXT,
판매일 DATETIME DEFAULT CURRENT_TIMESTAMP,
primary key (id ),
index(판매금액)
) comment='판매 기록2';
insert into 판매_기록2 (상품코드,상품명,가격,수량) values (11, '윗도리',20, 30);
insert into 판매_기록2 (상품코드,상품명,가격,수량) values (11, '윗도리',20, 40);
insert into 판매_기록2 (상품코드,상품명,가격,수량,판매금액) values (11, '윗도리',20, 40,600);
mysql> select * from 판매_기록2;
+----+--------------+-----------+--------+--------+--------------+--------+---------------------+
| id | 상품코드 | 상품명 | 가격 | 수량 | 판매금액 | 비고 | 판매일 |
+----+--------------+-----------+--------+--------+--------------+--------+---------------------+
| 1 | 11 | 윗도리 | 20 | 30 | 600 | NULL | 2025-02-02 16:37:46 |
| 2 | 11 | 윗도리 | 20 | 40 | 800 | NULL | 2025-02-02 16:37:47 |
| 3 | 11 | 윗도리 | 20 | 40 | 800 | NULL | 2025-02-02 16:38:17 |
+----+--------------+-----------+--------+--------+--------------+--------+---------------------+
단점이라면 시스템에 큰 무리가 가지 않겠지만 하겠지만 이런것 하나 둘 쌓이면 태산도 티끌로 이루어진것 처럼 부하가 있기 마련 입니다.
웹은 빨라야 하며 미리 모두 결과가 만들어져 있어야 합니다.
* 두가지의 차이는 다음과 같다.
- VIRTUAL: 데이터는 저장하지 않고 조회할 때마다 계산
- STORED: 계산 결과를 실제로 저장
