> 데이터 베이스 > MySQL 튜토리얼 > MySQL5.7에 대한 기본 JSON 작업(코드 예)

MySQL5.7에 대한 기본 JSON 작업(코드 예)

不言
풀어 주다: 2019-03-22 11:06:46
앞으로
3691명이 탐색했습니다.

이 기사의 내용은 MySQL5.7의 기본 JSON 작업(코드 예제)에 대한 것입니다. 이는 특정 참고 가치가 있으므로 도움이 될 수 있습니다.

MySQL 5.7의 기본 JSON 연산

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)
로그인 후 복사

Query
표현: 개체는 json 열->'$.key'이고 배열은 json 열->'$.key[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 열, '$.key')이고 배열은 JSON_EXTRACT(json 열, '$.key[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)
로그인 후 복사

하지만 위의 "Xiaomeng"에 큰따옴표가 있는 것을 보았는데 이는 우리가 사용하는 것과는 다릅니다. 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)
로그인 후 복사
Update

JSON_INSERT()를 사용하여 새 값을 삽입하고, 기존 값을 덮어쓰게 됩니다

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_SET()을 사용하여 새 값을 삽입하고 기존 값을 덮어씁니다

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_REPLACE()를 사용하여 기존 값 바꾸기

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)
로그인 후 복사
태그가 업데이트되지 않은 것을 확인할 수 있습니다

Delete

JSON_REMOVE()를 사용하여 JSON 요소를 삭제하세요

mysql> UPDATE test_user SET info = JSON_REPLACE(info, '$.sex', 1, '$.tag', '[1,2,3]') where id=2;
로그인 후 복사
를 보세요 result

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)
로그인 후 복사
이 기사는 여기서 끝납니다. 더 흥미로운 콘텐츠를 보려면 PHP 중국어 웹사이트의

MySQL Tutorial Video 칼럼을 주목하세요!

위 내용은 MySQL5.7에 대한 기본 JSON 작업(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿