이 기사의 내용은 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)
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)
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)
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;
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)
MySQL Tutorial Video 칼럼을 주목하세요!
위 내용은 MySQL5.7에 대한 기본 JSON 작업(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!