2016-01-25 5 views
15

Недавно я начал использовать MySQL 5.7.10, и мне нравится родной тип данных JSON.Как обновить столбец данных JSON в MySQL 5.7.10?

Но у меня возникла проблема, связанная с обновлением значения типа JSON.

Вопросы:

Ниже приведен формат таблицы, здесь я хочу добавить еще 1 ключ в 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) 

Есть ли работа вокруг этого?

+0

Почему вы добавляете данные, как это? это должен быть отдельный столбец для ключа и значения. –

+0

@PathikVejani Как я уже упоминал, я пытаюсь использовать mysql 5.7, который предоставляет родной тип данных json. Мой JSON может быть огромным. Я не могу добавить столбцы для каждой пары значений ключа. –

+4

Проверка: [12.16 Функции JSON] (https://dev.mysql.com/doc/refman/5.7/en/json-functions.html). – wchiquito

ответ

29

Спасибо @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) 

enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^