it-source

Mysql JSON 업데이트 키 값

criticalcode 2023. 6. 6. 00:01
반응형

Mysql JSON 업데이트 키 값

다음과 같은 테이블이 있습니다.

CREATE TABLE `campus_tb` (
 `campus_id` int(11) NOT NULL AUTO_INCREMENT,
 `campus_dataJSON` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL CHECK (json_valid(`campus_dataJSON`)),
 PRIMARY KEY (`campus_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

INSERT INTO `campus_tb`( `campus_dataJSON`) VALUES ( '[
                          {"id":"100","name":"James","age":"17","course":"IT"},
                          {"id":"101","name":"Eric","age":"19","course":"CS"},
                          {"id":"102","name":"Julie","age":"21"}]')




+--------------------+-----------------------------------------------------------+
| campus_id          |  campus_dataJSON                                          | 
+--------------------+-----------------------------------------------------------+
| 1                  |  [
                     |     {"id":"100","name":"James","age":"17","course":"IT"},
                     |     {"id":"101","name":"Eric","age":"19","course":"CS"},
                     |     {"id":"102","name":"Julie","age":"21"}
                     |
                     |  ] 
----------------------------------------------------------------------------------  
| 2                  |  [
                     |     {"id":"34","name":"Mimi","age":"18","course":"IT"},
                     |     {"id":"35","name":"Jose","age":"20","course":"CS"},
                     |     {"id":"36","name":"Ken","age":"24"}
                     |
                     |  ]
----------------------------------------------------------------------------------  

MariaDB 10.4를 사용하고 있습니다.

  1. MySql 쿼리 Julie에 대한 세부 정보 업데이트campus_id = 1그녀가 다음과 같이 될 수 있도록 "코스"를 추가하는 것.

    {"id":"102","name":"줄리","나이":"21","코스":"MASCOM",

  2. 끝에 "k"가 있는 "Eric"에서 "Erick"으로 업데이트하기 위한 Mysql 쿼리

저는 지금까지 노력해 왔습니다.

UPDATE `campus_tb` 
SET `campus_dataJSON` = JSON_SET (`campus_dataJSON`, TRIM( '"' FROM JSON_SEARCH(`campus_dataJSON`,'one','Julie')),'MASCOM') 
WHERE 
    `campus_id` = 1 AND 
    JSON_EXTRACT(`campus_dataJSON`,'$.id') = '102';

반환됩니다.0 rows affected구글 검색을 많이 했어요.

기본적으로 JSON_SET 함수를 사용해야 합니다.예를 들어 첫 번째 질문은 다음 방법으로 해결할 수 있습니다.

update campus 
 set campus_data = json_set(
   campus_data, '$[2].course', 'MASCOM')
 where campus_id = 1;

SQLize.online에서 테스트

JSON 경로를 모르는 경우 다음과 같이 JSON_SEARCH & JSON_UNQUOTE를 사용할 수 있습니다.

update campus 
 set campus_data = json_set(
   campus_data, 
   json_unquote(json_search(campus_data, 'one', 'Eric')), 
   'Erick'
 )
 where campus_id = 1;
 

여기서 바이올린 연주

언급URL : https://stackoverflow.com/questions/65009394/mysql-json-update-key-value

반응형