MySQL 5.7 의 JSON 기본 동작 안내
프로젝트 가 필요 하기 때문에 저장 필드 는 JSON 형식 으로 저장 되 었 고 프로젝트 에서 조회 한 값 을 잭 슨 을 통 해 해당 하 는 bean 으로 전환 하여 처리 하 는 것 이 간단 하고 편리 하지 않다 고 생각 합 니 다.
MySQL 은 5.7 버 전부터 JSON 형식의 데 이 터 를 지원 해 조작 이 편리 하 다.
건축 표
새 테이블 을 만 들 때 필드 형식 은 json 형식 으로 직접 설정 할 수 있 습 니 다.예 를 들 어 우리 가 테이블 을 만 들 때:
mysql> CREATE TABLE `test_user`(`id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, `info` JSON);
json 형식 필드 는 NULL 일 수 있 습 니 다.데이터 삽입:
mysql> INSERT INTO test_user(`name`, `info`) VALUES('xiaoming','{"sex": 1, "age": 18, "nick_name": " "}');
json 형식의 필드 는 유효한 json 문자열 이 필요 합 니 다.사용 가능
JSON_OBJECT()
함수 구조 json 대상:
mysql> INSERT INTO test_user(`name`, `info`) VALUES('xiaohua', JSON_OBJECT("sex", 0, "age", 17));
사용JSON_ARRAY()
함수 구조 json 배열:
mysql> INSERT INTO test_user(`name`, `info`) VALUES('xiaozhang', JSON_OBJECT("sex", 1, "age", 19, "tag", JSON_ARRAY(3,5,90)));
지금 test 보기user 표 의 데이터:
mysql> select * from test_user;
+----+-----------+--------------------------------------------+
| id | name | info |
+----+-----------+--------------------------------------------+
| 1 | xiaoming | {"age": 18, "sex": 1, "nick_name": " "} |
| 2 | xiaohua | {"age": 17, "sex": 0} |
| 3 | xiaozhang | {"age": 19, "sex": 1, "tag": [3, 5, 90]} |
+----+-----------+--------------------------------------------+
3 rows in set (0.04 sec)
조회 하 다.표현 식:대상 은 json 열->'$.키',배열 은 json 열->'$.키[index]'
mysql> select name, info->'$.nick_name', info->'$.sex', info->'$.tag[0]' from test_user;
+-----------+---------------------+---------------+------------------+
| name | info->'$.nick_name' | info->'$.sex' | info->'$.tag[0]' |
+-----------+---------------------+---------------+------------------+
| xiaoming | " " | 1 | NULL |
| xiaohua | NULL | 0 | NULL |
| xiaozhang | NULL | 1 | 3 |
+-----------+---------------------+---------------+------------------+
3 rows in set (0.04 sec)
등가:대상JSON_EXTRACT(json , '$. ')
,배열JSON_EXTRACT(json , '$. [index]')
mysql> select name, JSON_EXTRACT(info, '$.nick_name'), JSON_EXTRACT(info, '$.sex'), JSON_EXTRACT(info, '$.tag[0]') from test_user;
+-----------+-----------------------------------+-----------------------------+--------------------------------+
| name | JSON_EXTRACT(info, '$.nick_name') | JSON_EXTRACT(info, '$.sex') | JSON_EXTRACT(info, '$.tag[0]')
| +-----------+-----------------------------------+-----------------------------+--------------------------------+
| xiaoming | " " | 1 | NULL |
| xiaohua | NULL | 0 | NULL |
| xiaozhang | NULL | 1 | 3 |
+-----------+-----------------------------------+-----------------------------+--------------------------------+
3 rows in set (0.04 sec)
하지만 위 에 있 는'귀 요 미'가 더 블 따옴표 가 있 는 것 을 보 았 습 니 다.이것 은 우리 가 원 하 는 것 이 아니 라 JSON 을 사용 할 수 있 습 니 다.UNQUOTE 함 수 는 따옴표 를 제거 합 니 다.
mysql> select name, JSON_UNQUOTE(info->'$.nick_name') from test_user where name='xiaoming';
+----------+-----------------------------------+
| name | JSON_UNQUOTE(info->'$.nick_name') |
+----------+-----------------------------------+
| xiaoming | |
+----------+-----------------------------------+
1 row in set (0.05 sec)
조작 자 를 직접 사용 할 수도 있 습 니 다.->>
mysql> select name, info->>'$.nick_name' from test_user where name='xiaoming';
+----------+----------------------+
| name | info->>'$.nick_name' |
+----------+----------------------+
| xiaoming | |
+----------+----------------------+
1 row in set (0.06 sec)
물론 속성 도 조회 조건 으로 할 수 있다.
mysql> select name, info->>'$.nick_name' from test_user where info->'$.nick_name'=' ';
+----------+----------------------+
| name | info->>'$.nick_name' |
+----------+----------------------+
| xiaoming | |
+----------+----------------------+
1 row in set (0.05 sec)
특히 JSON 유형의 지정 속성 을 가상 열 을 통 해 빠르게 조회 할 수 있다.가상 열 만 들 기:
mysql> ALTER TABLE `test_user` ADD `nick_name` VARCHAR(50) GENERATED ALWAYS AS (info->>'$.nick_name') VIRTUAL;
조작 부호 사용 주의->>사용 시 일반 형식의 열 조회 와 같 습 니 다.
mysql> select name,nick_name from test_user where nick_name=' ';
+----------+-----------+
| name | nick_name |
+----------+-----------+
| xiaoming | |
+----------+-----------+
1 row in set (0.05 sec)
업데이트JSON_INSERT()
새 값 을 삽입 하지만 존재 하 는 값 을 덮어 쓰 지 않 습 니 다.
mysql> UPDATE test_user SET info = JSON_INSERT(info, '$.sex', 1, '$.nick_name', ' ') where id=2;
결 과 를 보다
mysql> select * from test_user where id=2;
+----+---------+--------------------------------------------+-----------+
| id | name | info | nick_name |
+----+---------+--------------------------------------------+-----------+
| 2 | xiaohua | {"age": 17, "sex": 0, "nick_name": " "} | |
+----+---------+--------------------------------------------+-----------+
1 row in set (0.06 sec)
JSON_SET()
새 값 을 삽입 하고 존재 하 는 값 을 덮어 씁 니 다.
mysql> UPDATE test_user SET info = JSON_INSERT(info, '$.sex', 0, '$.nick_name', ' ') where id=3;
결 과 를 보다
mysql> select * from test_user where id=3;
+----+-----------+---------------------------------------------------------------+-----------+
| id | name | info | nick_name |
+----+-----------+---------------------------------------------------------------+-----------+
| 3 | xiaozhang | {"age": 19, "sex": 1, "tag": [3, 5, 90], "nick_name": " "} | |
+----+-----------+---------------------------------------------------------------+-----------+
1 row in set (0.06 sec)
사용JSON_REPLACE()
존재 하 는 값 만 바 꾸 기
mysql> UPDATE test_user SET info = JSON_REPLACE(info, '$.sex', 1, '$.tag', '[1,2,3]') where id=2;
결 과 를 보다
mysql> select * from test_user where id=2;
+----+---------+--------------------------------------------+-----------+
| id | name | info | nick_name |
+----+---------+--------------------------------------------+-----------+
| 2 | xiaohua | {"age": 17, "sex": 1, "nick_name": " "} | |
+----+---------+--------------------------------------------+-----------+
1 row in set (0.06 sec)
태그 가 업데이트 되 지 않 은 것 을 볼 수 있 습 니 다.삭제
JSON 요 소 를 사용
JSON_REMOVE()
삭제
mysql> UPDATE test_user SET info = JSON_REMOVE(info, '$.sex', '$.tag') where id=1;
결 과 를 보다
mysql> select * from test_user where id=1;
+----+----------+----------------------------------+-----------+
| id | name | info | nick_name |
+----+----------+----------------------------------+-----------+
| 1 | xiaoming | {"age": 18, "nick_name": " "} | |
+----+----------+----------------------------------+-----------+
1 row in set (0.05 sec)
총결산이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.