/* VIEW : 가상 테이블 (데이터 딕셔너리 테이블에 SQL문만 저장되 디스크 공간 할당 없음.) */
-- 기존 뷰-테이블 삭제, 만약 없다면 생성. DROP VIEW IF EXISTS `v_object_info`; CREATE TABLE `v_object_info` ( `object_id` INT(11) NOT NULL COMMENT ' ObjectSequence', `object_name` VARCHAR(128) NOT NULL COLLATE 'utf8mb4_general_ci', `param` BIGINT(20) NOT NULL DEFAULT '0', `reg_date` DATETIME NOT NULL ) ENGINE = MyISAM;
-- 뷰-테이블 삭제 DROP VIEW IF EXISTS `v_object_info`; DROP TABLE IF EXISTS `v_object_info`; -- 뷰 알고리즘(Query) 생성 CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `v_object_info` AS SELECT `object_id`, `object_name`, `param`, `reg_date` FROM v_object_info;
# 생성 CREATE TABLE objectInfo ( objectID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, param VARCHAR(128), param2 JSON );
# 저장 INSERT INTO objectInfo SET param = '{"keep":23,"storage":"1"}', param2 = '{"keep":23,"storage":"1"}'; ( OR ) INSERT INTO objectInfo SET param = '{"keep":23,"storage":"1"}', param2 = JSON_OBJECT("keep", 23, "storage", "1");
TABLE : objectInfo
objectID
param
param2
1
{"storage":"1"}
{"storage":"1"}
2
{"keep":23,"storage":"1"}
{"keep":23,"storage":"1"}
# 검색 SELECT objectID, param FROM objectInfo;
objectID
param
param2
1
{"storage":"1"}
{"storage":"1"}
2
{"keep":23,"storage":"1"}
{"keep":23,"storage":"1"}
/* 화살표(->)로 필드와 경로식을 구분. param 컬럼에 있는 JSON 데이터에서 key 이름이 keep, storage 요소를 가리킨다. param->'$.keep' 문은 json_extract(param, '$.keep') 과 동일. */ SELECT objectID, param->'$.keep' AS keep, param->'$.storage' AS storage , CAST(param->'$.storage' AS SIGNED) AS castIntStorage FROM objectInfo;
objectID
keep
storage
castIntStorage
1
(NULL)
1
1
2
23
1
1
# 수정 UPDATE는 JSON_SET(), JSON_REPLACE(), JSON_REMOVE() 함수 이용.
JSON_SET(): 기존 값 수정하고 미존재 시 추가. JSON_REPLACE(): 기존 값 변경. JSON_REMOVE(): 기존 값 삭제. -> NULL.