>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 JSON 유형 필드를 사용하는 방법

MySQL에서 JSON 유형 필드를 사용하는 방법

WBOY
WBOY앞으로
2023-04-17 18:52:051210검색

테스트 환경: MySQL8.0.19

준비

CREATE TABLE json_demo ( 
	`id` INT ( 11 ) NOT NULL PRIMARY KEY, 
	`content` json NOT NULL 
);
INSERT INTO json_demo ( id, content )
VALUES
	/*这条是数组*/
	( 1, '[{"key": 1, "order": 1, "value": "34252"},{"key": 2, "order": 2, "value": "23423"}]' ),
	/*这条是数组*/
	( 2, '[{"key": 4, "order": 4, "value": "234"},{"key": 5, "order": 5, "value": "234324523"}]' ),
	/*这条是对象*/
	( 3, '{"key": 3, "order": 3, "value": "43242"}' ),
	/*这条是对象*/
	( 4, '{"key": 6, "order": 6, "value": "5423"}' );

JSON 개체의 기본 작업

지정된 필드 값 쿼리

/* 基础查询 */
SELECT
	content -> '$.key' AS 'key',
	JSON_EXTRACT(content, '$.key') AS 'key2',
	content -> '$.value' AS 'value',
	JSON_EXTRACT(content, '$.value') AS 'value2',
	content ->> '$.value' AS 'value3',
	JSON_UNQUOTE(JSON_EXTRACT(content, '$.value')) AS 'value4'
FROM
	json_demo 
WHERE
	id > 2;

MySQL에서 JSON 유형 필드를 사용하는 방법

팁:

  • -&g t;그리고-> ;>는 MySQL이 설계한 구문으로, ->는 MySQL5.7에서 지원되고 ->>는 MySQL8.0에서 지원됩니다.

  • -> JSON_EXTRACT()와 동일하며 쿼리 필드가 문자열인 경우 반환 값에도 ""가 포함됩니다.

  • ->> JSON_UNQUOTE(JSON_EXTRACT())와 동일하며, 쿼리 필드가 문자열인 경우 반환 값에 ""가 포함되지 않습니다.

조건 쿼리에 사용

content -> '$.key'는 필드로 간주할 수 있으며 기본적으로 필드에서 수행할 수 있는 작업을 수행할 수 있습니다.

SELECT
	id,
	content -> '$.key' AS 'key',
	content ->> '$.value' AS 'value3'
FROM
	json_demo 
WHERE
	id > 2
	AND content -> '$.key' > 1
	AND content -> '$.value' like '%2%';

MySQL에서 JSON 유형 필드를 사용하는 방법

지정된 필드 값 수정

/* 修改 */
UPDATE json_demo 
SET content = JSON_REPLACE(
	content,
	/* 将content.key值 + 1 */
	'$.key', content -> '$.key' + 1,
	/* 将content.value值后拼接'abc' */
	'$.value', concat(content ->> '$.value', 'abc')
) WHERE id = 3;
/* JSON_SET也可以 */
UPDATE json_demo 
SET content = JSON_SET(
	content,
	/* 将content.key值 + 1 */
	'$.key', content -> '$.key' + 1,
	/* 将content.value值后拼接'abc' */
	'$.value', concat(content ->> '$.value', 'abc')
) WHERE id = 3;
/* 查询修改结果 */
SELECT id,content,content -> '$.key' AS 'key',content ->> '$.value' AS 'value3'
FROM json_demo WHERE id = 3;
/* 重新赋值 */
UPDATE json_demo SET 
content = JSON_REPLACE(content,'$.key',3,'$.value','43242') WHERE id = 3;

MySQL에서 JSON 유형 필드를 사용하는 방법

팁:

  • JSON_REPLACE와 JSON_SET은 모두 특정 필드 값을 수정하는 데 사용할 수 있습니다. 차이점은 JSON_REPLACE가 대체되면 작업이 유효하지 않다는 것입니다. 존재하지 않는 속성, JSON_SET은 존재하지 않는 속성을 삽입합니다.

  • 따라서 JSON_SET은 JSON_INSERT와 유사하게 속성을 추가하는 데에도 사용할 수 있습니다. 차이점은 기존 속성이 삽입되면 JSON_INSERT 작업이 실패하고 JSON_SET이 이를 대체한다는 것입니다.

요소 추가

UPDATE json_demo 
SET content = JSON_INSERT(content, '$.key', 234)
WHERE id = 3;

SELECT id,content,content -> '$.key' AS 'key' FROM json_demo WHERE id = 3;

UPDATE json_demo 
SET content = JSON_INSERT(content, '$.temp', 234)
WHERE id = 3;

SELECT id,content,content -> '$.key' AS 'key' FROM json_demo WHERE id = 3;

UPDATE json_demo 
SET content = JSON_SET(content, '$.temp2', 432)
WHERE id = 3;

SELECT id,content,content -> '$.key' AS 'key' FROM json_demo WHERE id = 3;

MySQL에서 JSON 유형 필드를 사용하는 방법

JSON 배열 연산

지정된 필드 값 쿼리

SELECT
	id,
	content -> '$[*].key' AS 'key',
	content ->> '$[*].value' AS 'value',
	content -> '$[0].key' AS 'key2',
	content ->> '$[0].value' AS 'value2',
	/* 查询数组长度 */
	JSON_LENGTH(content) AS 'length'
FROM
	json_demo 
WHERE
	id < 3;

MySQL에서 JSON 유형 필드를 사용하는 방법

조건부 쿼리

SELECT
	id,
	content -> &#39;$[*].key&#39; AS &#39;key&#39;,
	content ->> &#39;$[*].value&#39; AS &#39;value&#39;
FROM
	json_demo 
WHERE
	id < 3
	/* content.value的值中存在like&#39;%34%&#39;的值 */
	AND content ->> &#39;$[*].value&#39; like &#39;%34%&#39;
	/* content.key的值中有4 */
	AND JSON_OVERLAPS(content ->> &#39;$[*].key&#39;, &#39;4&#39; );

MySQL에서 JSON 유형 필드를 사용하는 방법

지정된 필드 값 수정

기본 작업은 JSON 개체와 유사합니다. '$' 뒤에 해당 인덱스 비트 '$[0]'을 추가하고 모두 지정하려면 '$[*]'를 추가하는 것입니다. 배열에 배열이 포함된 경우 '$[1][2][3]'을 통해 깊은 배열 요소를 지정할 수 있습니다.

MySQL에서 JSON 유형 필드를 사용하는 방법

요소 추가

JSON_ARRAY_APPEND 및 JSON_ARRAY_INSERT 모두 배열 요소를 추가할 수 있습니다. 차이점은 JSON_ARRAY_APPEND가 인덱스 비트를 지정할 필요가 없다는 것입니다. 이 경우 JSON_ARRAY_INSERT는 인덱스 비트를 지정해야 하며 지정되지 않으면 오류가 보고됩니다.

JSON_ARRAY_APPEND는 지정된 인덱스 비트 뒤에 추가되고, JSON_ARRAY_INSERT는 지정된 인덱스 비트 앞에 삽입됩니다.

MySQL에서 JSON 유형 필드를 사용하는 방법

추가 작업

JSON 문서 중앙값 경로 JSON 문서에 데이터 삽입 부분 업데이트 후 JSON 열 값의 이진 표현에 여유 공간
Name Description
JSON_ARRAY() JSON 배열 만들기
JSON_ARRAY_APPEND() JSON에 데이터 추가 SON 문서
JSON_ARRAY_INSERT() JSON 배열에 삽입
JSON_CONTAINS() JSON 문서에 경로에 특정 개체가 포함되어 있는지 여부
JSON_CONTAINS_PATH() JSON 문서에 경로에 데이터가 포함되어 있는지 여부
JSON_DEPTH() JSON 문서의 최대 깊이
JSON_EXTRACT() JSON 문서에서 데이터 반환
JSON_INSERT() JSON 문서에 데이터 삽입
JSON_KEYS() JSON 문서의 키 배열
JSON_LENGTH() JSON 문서의 요소 수
JSON_MERGE()(더 이상 사용되지 않음) JSON 문서를 병합하고 중복 키를 유지합니다. JSON_MERGE_PRESERVE()
JSON_MERGE_PATCH() JSON 문서 병합, 중복 키 값 바꾸기
JSON_MERGE_PRESERVE() JSON 문서 병합, 중복 키 유지
JSON_OBJECT() JSON 객체 생성
JSON_OVERLAPS() (8.0.17에서 도입됨) 두 JSON 문서를 비교하여 공통된 키-값 쌍 또는 배열 요소가 있으면 TRUE(1)를 반환하고, 그렇지 않으면 FALSE(0)를 반환합니다. )
JSON_PRETTY() JSON 문서를 읽기 쉬운 형식으로 인쇄
JSON_QUOTE() JSON 문서 인용
JSON_REMOVE() JSON 문서에서 데이터 제거
JSON_REPLACE() JSON 문서의 값 바꾸기
JSON_SCHEMA_VALID()(8.0.17에서 도입됨) JSON 스키마에 대해 JSON 문서의 유효성을 검사합니다. 문서가 스키마에 대해 유효성이 검사되면 TRUE/1을 반환합니다. ; 그렇지 않으면 FALSE/0을 반환합니다.
JSON_SCHEMA_VALIDATION_REPORT()(8.0.17에 도입됨) JSON 스키마에 대한 JSON 문서 유효성 검사는 성공 또는 실패 및 실패 이유를 포함하여 유효성 검사 결과에 대한 보고서를 JSON 형식으로 반환합니다.
JSON_SET()
JSON_STORAGE_FREE()
JSON_ STORAGE_SIZE( ) used acespace 공간 JSON Document
json_table ()의 이진 표현을 저장하는 데 사용됩니다. () JSON 값 역참조
JSON_VALID() JSON 값이 유효한가요?
JSON_VALUE() (8.0.21에서 추가됨) JSON 문서에서 가리키는 위치의 값을 추출합니다. 제공된 경로는 VARCHAR(512) 또는 지정된 유형이 이 값을 반환합니다.
MEMBER OF()(8.0.17에서 도입됨) 첫 번째 피연산자가 두 번째 피연산자로 전달된 JSON 배열의 요소와 일치하면 반환합니다. true(1), 그렇지 않으면 false(0)를 반환

위 내용은 MySQL에서 JSON 유형 필드를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제