Как обновить динамическое количество ключей в столбце json в MySQL 5.7 как подготовленный оператор - PullRequest
0 голосов
/ 20 января 2019

Я создал таблицу в MySQL 5.7, как показано ниже.

id   :int
data :json

Теперь данные имеют несколько ключей как json.

data = {"a":"b","c":"d"};

Теперь у меня есть требование обновить существующие данные новыми данными для обновления нескольких (динамических) ключей в нем.

Как этого добиться.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Вы можете просто выполнить запрос UPDATE, установив обновленный объект в строковой форме.

Например: Учитывая, что вы создаете приложение JS.

updatedData = JSON.Stringify(updatedData)

query> update t set data = updatedData;
0 голосов
/ 20 января 2019

Вот демо. Сначала я создаю таблицу, подобную вашей, с данными JSON.

mysql [localhost] {msandbox} (test) > create table t (id int primary key, data json);
Query OK, 0 rows affected (0.02 sec)

mysql [localhost] {msandbox} (test) > insert into t values (1, json_object('a', 'b', 'c', 'd'));
Query OK, 1 row affected (0.01 sec)

mysql [localhost] {msandbox} (test) > select * from t;
+----+----------------------+
| id | data                 |
+----+----------------------+
|  1 | {"a": "b", "c": "d"} |
+----+----------------------+
1 row in set (0.00 sec)

Теперь я обновляю данные JSON новыми значениями.

mysql [localhost] {msandbox} (test) > update t set data = json_merge_patch(data, json_object('a', 123, 'c', 'foo'));
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql [localhost] {msandbox} (test) > select * from t;
+----+------------------------+
| id | data                   |
+----+------------------------+
|  1 | {"a": 123, "c": "foo"} |
+----+------------------------+

Для подготовленного оператора вы должны использовать заполнители параметров при создании объекта JSON, который будет обновлять данные.

update t set data = json_merge_patch(data, json_object(?, ?, ?, ?));

Я не уверен, что вы подразумеваете под динамическими клавишами. Вам придется использовать заполнители параметров в парах (1 ключ, 1 значение), а количество параметров должно быть зафиксировано во время подготовки запроса. Вы должны написать код приложения для построения запроса с таким количеством заполнителей параметров, сколько вам нужно.

Вы должны прочитать о функциях JSON, таких как JSON_MERGE_PATCH (), здесь: https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...