programing

MySQL 5.7.10에서 JSON 데이터 유형 열을 업데이트하는 방법

newsource 2022. 12. 6. 22:02

MySQL 5.7.10에서 JSON 데이터 유형 열을 업데이트하는 방법

최근 MySQL 5.7.10을 사용하기 시작했고 네이티브 JSON Data 타입을 매우 좋아합니다.

그런데 JSON 타입의 값을 갱신하는 데 문제가 생겼습니다.

질문:

아래는 표 형식입니다.여기서 JSON에 키를 하나 더 추가합니다.data의 칼럼을 쓰다.t1테이블입니다. 지금 당장 값을 수정하고 테이블을 업데이트해야 합니다.그래서 추가 비용이 필요하죠.SELECT진술.

이렇게 삽입할 수 있습니다.

INSERT INTO t1 values ('{"key2":"value2"}', 1);

mysql> select * from t1;
+--------------------+------+
| data               | id   |
+--------------------+------+
| {"key1": "value1"} |    1 |
| {"key2": "value2"} |    2 |
| {"key2": "value2"} |    1 |
+--------------------+------+
3 rows in set (0.00 sec)

mysql>Show create table t1;


+-------+-------------------------------------------------------------

-------------------------------------------------------+
| Table | Create Table                                                                                                       |
+-------+--------------------------------------------------------------------------------------------------------------------+
| t1    | CREATE TABLE `t1` (
  `data` json DEFAULT NULL,
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+--------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

이거에 대한 일거리가 있나요?

올바른 길을 가르쳐 주셔서 @wchiquito님 감사합니다.나는 그 문제를 해결했다.내가 한 방법은 이렇다.

mysql> select * from t1;
+----------------------------------------+------+
| data                                   | id   |
+----------------------------------------+------+
| {"key1": "value1", "key2": "VALUE2"}   |    1 |
| {"key2": "VALUE2"}                     |    2 |
| {"key2": "VALUE2"}                     |    1 |
| {"a": "x", "b": "y", "key2": "VALUE2"} |    1 |
+----------------------------------------+------+
4 rows in set (0.00 sec)

mysql> update t1 set data = JSON_SET(data, "$.key2", "I am ID2") where id = 2;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from t1;
+----------------------------------------+------+
| data                                   | id   |
+----------------------------------------+------+
| {"key1": "value1", "key2": "VALUE2"}   |    1 |
| {"key2": "I am ID2"}                   |    2 |
| {"key2": "VALUE2"}                     |    1 |
| {"a": "x", "b": "y", "key2": "VALUE2"} |    1 |
+----------------------------------------+------+
4 rows in set (0.00 sec)

mysql> update t1 set data = JSON_SET(data, "$.key3", "I am ID3") where id = 2;
Query OK, 1 row affected (0.07 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from t1;
+------------------------------------------+------+
| data                                     | id   |
+------------------------------------------+------+
| {"key1": "value1", "key2": "VALUE2"}     |    1 |
| {"key2": "I am ID2", "key3": "I am ID3"} |    2 |
| {"key2": "VALUE2"}                       |    1 |
| {"a": "x", "b": "y", "key2": "VALUE2"}   |    1 |
+------------------------------------------+------+
4 rows in set (0.00 sec)

편집: 어레이를 추가하려면JSON_ARRAY맘에 들다

update t1 set data = JSON_SET(data, "$.key4", JSON_ARRAY('Hello','World!')) where id = 2;

여기에 이미지 설명 입력

MySQL 5.7.22+에서는 다음과 같이 단일 쿼리에서 json의 전체 fragment(복수 키 값 또는 중첩된 값)를 매우 쉽고 쉽게 업데이트할 수 있습니다.

update t1 set data = 
JSON_MERGE_PATCH(`data`, '{"key2": "I am ID2", "key3": "I am ID3"}') where id = 2;

이 페이지를 방문하여 "더 나은" 제품을 찾는 데 도움이 되기를 바랍니다.JSON_SET:) 상세JSON_MERGE_PATCH여기: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#function_json-merge-patch

언급URL : https://stackoverflow.com/questions/34986223/how-to-update-json-data-type-column-in-mysql-5-7-10