2016-01-25 8 views
15

最近私はMySQL 5.7.10の使用を開始しました。ネイティブのJSONデータ型が好きです。MySQL 5.7.10でJSONデータ型の列を更新するには?

しかし、JSON型の値を更新する際に問題が発生しました。

質問:以下

ここで私はt1テーブルのJSON data欄の1以上のキーを追加したい、テーブル形式です。今すぐ値をフェッチしてテーブルを更新する必要があります。したがって、追加の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私が言及したように、ネイティブのjsonデータ型を提供するmysql 5.7を利用しようとしています。私のJSONは膨大なものになります。すべてのキー値のペアに列を追加することはできません。 –

+4

[12.16 JSONの機能](https://dev.mysql.com/doc/refman/5.7/ja/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

関連する問題