
Key - value란?
JSON_OBJECT
Key - value 입력값을 JSON 객체로 반환하는 함수
INSERT 구문에서 사용 / 테이블, 컬럼을 추가할 때
(구문)
JSON_OBJECT(1키값, 1벨류값, 2키값, 2벨류값….)
예제1) 배열을 통해 컬럼 수를 줄여보자
하기 코드에서
무슨요일에 쉬는지를 의미하는 off 컬럼과
대체자를 뜻하는 substitute 컬럼을
하나의 Key - value로 묶어보겠다.
기존 코드
CREATE TABLE IF NOT EXISTS `managers_v2` (
`id` int unsigned NOT NULL,
`name` varchar(40) NOT NULL,
`managing` varchar(50) NOT NULL,
`off` varchar(50) NOT NULL, -- 휴일
`substitute` int unsigned NOT NULL, --대체자
PRIMARY KEY (`id`) );
INSERT INTO `managers_v2` (`id`, `name`, `managing`, `off`, `substitute`) VALUES
(0, '영희', '스포츠', '토,일', 1),
(1, '철수', '주방용품', '일,월', 2),
(2, '민수', '디지털', '화,토', 3),
(3, '길순', '키즈', '금,토', 0);
JSON_OBJECT로 off,substitute 컬럼을 묶은 코드
DROP TABLE IF EXISTS `managers_v2`; -- 이전에 만들어진 테이블 삭제
CREATE TABLE IF NOT EXISTS `managers_v2` (
`id` int unsigned NOT NULL,
`name` varchar(40) NOT NULL,
`managing` varchar(50) NOT NULL,
`info` JSON NULL, -- 휴일과 대체자 값을 넣어줄 info 테이블을 만들어 줌
PRIMARY KEY (`id`) );
INSERT INTO `managers_v2` (`id`, `name`, `managing`, 'info') VALUES
(0, '영희', '스포츠', JSON_OBJECT('off',JSON_ARRAY('일','월'),'substitute', '민수' )),
--설명
--key1 : "off", Value1 :('일','월')
--key2 : substitute, Value2 : '민수'
-- JSON_OBJECT함수를 활용해 key값은 컬럼 역할, value값은 값 역할을 할 수 있도록 작성
(1, '철수', '주방용품', JSON_OBJECT('off',JSON_ARRAY('화','수'),'substitute', '길순' )),
(2, '민수', '디지털', JSON_OBJECT('off',JSON_ARRAY('목','금'),'substitute', '철수' )),
(3, '길순', '키즈', JSON_OBJECT('off',JSON_ARRAY('토','일'),'substitute', '영희' ));
결과 테이블

JSON_EXTRACT
JSON 배열의 Value값을 추출할때 사용.
SELECT 구문에서 사용.
구문 : SELECT JSON_EXTRACT(컬럼명, ‘$.key값’)
$ : 키의 Value값 추출시에 사용
예제) Managers_v2 테이블에서 info컬럼의 off키의 Value값을 추출해 보자.

SELECT JSON_EXTRACT(info, '$.off') as off
FROM Managers_v2
결과값) info라는 키값에서 off라는 value 값을 가져옴.

+인덱싱 처리도 할 수 있다.
SELECT JSON_EXTRACT(info, '$.off[0]') as off_first -- 인덱스 0 추출(인덱싱처리)
FROM Managers_v2
결과값) off key 값의 인덱스 0번(첫번째) 추출

JSON_INSERT
컬럼에 Key - value 쌍을 삽입할때 사용.
구문
UPDATE 테이블명 set 컬럼명 = JSON_INSERT(컬럼명, ‘$.신규키값’,’신규value값’);
예제)Managers_v2 테이블의 info 컬럼에
new라는 키값과 1,2,3,4라는 value의 배열을 넣어보자.
UPDATE Managers_V2 set info = JSON_INSERT(info, ‘$.new’,JSON_ARRAY(1,2,3,4));
JSON_REPLACE
이미 있는 KEY값을 바꾸는 함수
구문
UPDATE 테이블명 set 컬럼명 = JSON_REPLACE(컬럼명, ‘$.키값’,’변경 Value값’);
=데이터를 변경하고싶은 테이블, 컬럼을 작성 후 변경하고자 하는 키 값, 변경 value 값을 넣는다.
예제)Managers_v2 테이블의 info 컬럼에
new라는 키값에 있는 value를 1로 변경해보자.
UPDATE Managers_V2 set info = JSON_REPLACE(info, ‘$.new’,1);