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
'programing' 카테고리의 다른 글
리액트 라우터 외부 링크 (0) | 2022.12.06 |
---|---|
vuex namesthed 모듈 상태에 대한 getter 및 setter를 생성하는 방법 (0) | 2022.12.06 |
데이터 잘라내기:1행의 'logo' 열에 대한 데이터가 너무 깁니다. (0) | 2022.12.06 |
클래스와 타입의 차이 (0) | 2022.12.06 |
php에서 로그 파일을 만드는 방법 (0) | 2022.12.06 |