Обновите одно поле в типе данных MySQL longtext

0

В базе данных MySQL хранятся некоторые данные JSON с табличной схемой:

create TABLE ApplicationEntity (
    ->  name varchar(100),
    ->  jsonData longtext
    ->  ) ENGINE=InnoDB Default CHARSET=latin1;

Одна запись примера для jsonData в таблице выглядит так:

[{"name":"some_name","description":"good_description","gla":"None","srcPort":"123","dstPort":"2345","disableTimeout":false"}]

Как мы можем получить доступ к отдельному ключу и значению пары к обновлению.

Я пробовал что-то вроде этого:

mysql> Update ApplicationEntity set jsonData='%"gla":"google"%' where jsonData like '%"gla":"None"%';
Query OK, 5 rows affected (0.02 sec)
Rows matched: 5  Changed: 5  Warnings: 0

Но таблица попала в эту форму

mysql> select * from ApplicationEntity;
+------+-------------------------------------------------------------------------------------------------------------------+
| name | jsonData                                                                                                     |
+------+-------------------------------------------------------------------------------------------------------------------+
| a1   | %"gla":"google"%                                                                                                    |
| a2   | %"gla":"google"%                                                                                                    |
| a2   | %"gla":"google"%                                                                                                    |
| a2   | %"gla":"google"%                                                                                                    |
| a2   | %"alg":"google"%                                                                                                    |
| a2   | [{"name":"CREATED_IN_CHROME","description":"","gla":"google","srcPort":"","dstPort":"2345","disableTimeout":false}] |
| a2   | [{"name":"CREATED_IN_MOZILL","description":"","gla":"google","srcPort":"","dstPort":"2345","disableTimeout":false}] |
+------+-------------------------------------------------------------------------------------------------------------------+

Очевидно, что это не сработало, мой вопрос заключается в том, чтобы использовать тип данных longtext, как мы можем делать обновления для отдельных полей.

Итак, таблица должна войти в эту форму:

+------+-----------------------------------------------------------------------------------------------------------------------+
| name | jsonData                                                                                                         |
+------+-----------------------------------------------------------------------------------------------------------------------+
| a1   | [{"name":"CREATED_IN_IE","description":"","gla":"google","srcPort":"","dstPort":"2345","disableTimeout":false}]         |
| a2   | [{"name":"CREATED_IN_SAFARI","description":"","gla":"google","srcPort":"","dstPort":"2345","disableTimeout":false}]     |
| a2   | [{"name":"CREATED_IN_OMERTA","description":"","gla":"google","srcPort":"","dstPort":"2345","disableTimeout":false}]     |
| a2   | [{"name":"CREATED_IN_duckduckgo","description":"","gla":"google","srcPort":"","dstPort":"2345","disableTimeout":false}] |
| a2   | [{"name":"CREATED_IN_ucbrowser","description":"","gla":"google","srcPort":"","dstPort":"2345","disableTimeout":false}]  |
| a2   | [{"name":"CREATED_IN_CHROME","description":"","gla":"google","srcPort":"","dstPort":"2345","disableTimeout":false}]     |
| a2   | [{"name":"CREATED_IN_MOZILL","description":"","gla":"google","srcPort":"","dstPort":"2345","disableTimeout":false}]     |
+------+-----------------------------------------------------------------------------------------------------------------------+ 
  • 0
    Какая версия MySQL? В MySQL 5.7 есть функции JSON, которые могут помочь: dev.mysql.com/doc/refman/5.7/en/json-functions.html
  • 0
    Пожалуйста, поделитесь функциями JSON, которые помогут здесь, независимо от версии, ее количество способов решения проблемы, которая имеет большее значение.
Показать ещё 1 комментарий
Теги:

1 ответ

0
Лучший ответ

Что-то вроде этого также будет работать:

UPDATE ApplicationEntity
SET jsonData = REPLACE(jsondata, 'None', 'google')
WHERE jsonData LIKE '%"gla":"None"%'

Где REPLACE - это строковая функция MySQL

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace

Также мы должны знать, что регулярные выражения не поддерживаются функцией MySQL REPLACE.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню