일반적으로 mysql 데이터베이스의 필드는 쿼리할 때 json 형식의 문자열을 저장해야 하며 매번 꺼내집니다. , 쿼리가 구문 분석되므로 효율성이 떨어지고 더 번거롭습니다.
다행히 Mysql5.7 이상 버전에서는 키를 통해 값을 쿼리할 수 있는 json_extract 함수를 제공합니다(json 배열 형식인 경우 값을 가져올 수 있음). 아래 첨자를 통해 해당 위치를 알 수 있어 매우 편리합니다.
Mysql5.7 버전 이후 새로운 기능으로 Mysql에서는 JSON 값이 더 이상 문자열 형식으로 저장되지 않습니다. a 문서 요소를 빠르게 읽을 수 있는 내부 바이너리 형식입니다. Json 열을 삽입하거나 업데이트할 때 Json 텍스트가 자동으로 확인됩니다. 확인에 실패한 텍스트는 오류 메시지를 생성합니다. Json 텍스트는 표준 방식으로 생성되며 =, <, <=, >, >=, <>, != 및 <=와 같은 대부분의 비교 연산자를 비교 작업에 사용할 수 있습니다. >.
저장되는 데이터는 json 문자열입니다(유형은 vachar).
json에서 특정 필드의 값을 쿼리하려는 경우 사용되는 방법은 JSON_EXTRACT()입니다.
구문:
**JSON_EXTRACT(json_doc, path[, path] …)**
사용 팁:
json 문자열이 배열이 아닌 경우 $.Field 이름을 사용하세요. 직접
$.字段名
如果json字符串是数组[Array],则直接使用 $[对应的索引ID]
JSON_EXTRACT性能验证 , 通过查看执行计划,验证全部都是全表扫描。
使用场景:数据量不大json字符串较大则可以采用,数据量较大不建议使用。
说明:
普通字段使用 $.KEY
获取
数组字段使用 $.KEY[index]
$[해당 인덱스 ID]
3.1 일반 json에서 값 추출 | 지침: | 가져오려면 일반 필드에 $.KEY 를 사용하세요 |
$를 사용하세요. 배열 필드용 KEY [index] 획득, 인덱스는 0 |
||
---|---|---|---|---|---|
"장산" | 136- 6666-6666 | "basketball " | "run" | "sing" |
3.2 json 배열
id | 값 추출이름 | |
---|---|---|
1 | zhangsan | |
2 | lisi | |
3 | 왕우 | |
4 | zhaoliu |
사용자의 첫 번째 태그 추출:
select json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.name") as name, json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.tel_no") as tel_no, json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[0]") as hobby_1, json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[1]") as hobby_2, json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[2]") as hobby_3, json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[3]") as hobby_4;
id | name | |
---|---|---|
1 | 장산 | |
1 |
위 내용은 MySQL에서 json_extract 함수를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!