2016-01-25 31 views
15

Son zamanlarda MySQL 5.7.10 kullanmaya başladım ve yerel JSON Veri türünü çok beğeniyorum.MySQL 5.7.10'da JSON veri türü sütunu nasıl güncellenir?

Ancak JSON tipi bir değeri güncelleştirmeye gelince bir sorunla karşılaştım.

Sorular:

Aşağıda, tablo biçimidir burada t1 tablo için JSON data sütunda 1 daha anahtarı eklemek istiyorum. Şu anda değeri değiştirmek ve tabloyu güncelleştirmek zorundayım. Yani ek bir SELECT bildirimi içerir.

Bir çalışma bunun için çevresinde var mı bu

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) 

gibi ekleyebilirsiniz?

+0

Neden böyle veri eklemek mi? anahtar ve değer için ayrı sütun olmalıdır. –

+0

@PathikVejani Dediğim gibi, yerel json veri türü sağlayan mysql 5.7'yi kullanmaya çalışıyorum. JSON'um çok büyük olabilir. Her anahtar değer çifti için sütun ekleyemiyorum. –

+4

Kontrol: [12.16 JSON Fonksiyonları] (https://dev.mysql.com/doc/refman/5.7/en/json-functions.html). – wchiquito

cevap

29

Sağ yönünü işaret ettiğin için teşekkürler @wchiquito. Sorunu çözdüm. İşte ben böyle yaptım.

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