Mysql
 sql >> база данни >  >> RDS >> Mysql

JSON_SET() срещу JSON_INSERT() срещу JSON_REPLACE() в MySQL:Каква е разликата?

В MySQL има редица функции, които да ви помогнат да работите с JSON документи. Те включват JSON_SET() , JSON_INSERT() и JSON_REPLACE() функции.

Тези три функции са свързани, но се различават леко.

Синтаксис

Първо, ето синтаксиса и за трите функции:

JSON_SET(json_doc, път, val[, път, val] ...)JSON_INSERT(json_doc, път, val[, път, val] ...)JSON_REPLACE(json_doc, път, val[, път, val] ...)

Така че и трите функции приемат едни и същи аргументи. Ето за какво са тези аргументи:

  • json_doc е JSON документът.
  • path е пътят на елемента, за който да се вмъкнат данни или да се актуализира стойността в.
  • val е новата стойност.

Разликата

Ето разликата между тези функции:

  • JSON_SET() замества съществуващите стойности и добавя несъществуващи стойности.
  • JSON_INSERT() вмъква стойности, без да заменя съществуващите стойности.
  • JSON_REPLACE() заменя само съществуващите стойности.

Така че основно кой от тях ще използвате зависи от това дали актуализирате съществуваща стойност или вмъквате нова (въпреки че JSON_SET() прави и двете).

Пример 1 – Вмъкване на стойност

Ето примери за демонстриране на разликата между тези три функции.

JSON_SET()

Ето какво се случва, ако се опитаме да вмъкнем нова стойност с помощта на JSON_SET() :

SELECT JSON_SET('{"a":1, "b":2}', '$.c', 3) КАТО 'Резултат';

Резултат:

+-------------------------+| Резултат |+-------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+ 

Така че работи перфектно.

JSON_INSERT()

Ето какво се случва, ако се опитаме да вмъкнем нова стойност с помощта на JSON_INSERT() :

SELECT JSON_INSERT('{"a":1, "b":2}', '$.c', 3) КАТО 'Резултат';

Резултат:

+-------------------------+| Резултат |+-------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+ 

Точно същият резултат като при JSON_SET() .

JSON_REPLACE()

Ето какво се случва, ако се опитаме да вмъкнем нова стойност с помощта на JSON_REPLACE() :

SELECT JSON_REPLACE('{"a":1, "b":2}', '$.c', 3) КАТО 'Резултат';

Резултат:

+-----------------+| Резултат |+------------------+| {"a":1, "b":2} |+-----------------+

В този случай новата стойност не е въведена. Оригиналният JSON документ се връща непроменен. Това е така, защото тази функция заменя само съществуващите стойности – не вмъква нови.

Пример 2 – Актуализиране на съществуваща стойност

Сега за актуализиране на съществуващи стойности.

JSON_SET()

Ето какво се случва, ако се опитаме да актуализираме съществуваща стойност с помощта на JSON_SET() :

SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) КАТО 'Резултат';

Резултат:

+-----------------+| Резултат |+------------------+| {"a":1, "b":3} |+-----------------+

Така че отново работи перфектно. Успешно актуализирахме втората двойка ключ/стойност с новата стойност.

JSON_INSERT()

Ето какво се случва, ако се опитаме да актуализираме съществуваща стойност с помощта на JSON_INSERT() :

SELECT JSON_INSERT('{"a":1, "b":2}', '$.b', 3) КАТО 'Резултат';

Резултат:

+-----------------+| Резултат |+------------------+| {"a":1, "b":2} |+-----------------+

В този случай съществуващата стойност не е актуализирана. JSON документът се връща непроменен. Това е така, защото JSON_INSERT() функцията вмъква само нови стойности – не актуализира съществуващите.

JSON_REPLACE()

Ето какво се случва, ако се опитаме да актуализираме съществуваща стойност с помощта на JSON_REPLACE() :

SELECT JSON_REPLACE('{"a":1, "b":2}', '$.b', 3) КАТО 'Резултат';

Резултат:

+-----------------+| Резултат |+------------------+| {"a":1, "b":3} |+-----------------+

Актуализира се перфектно.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Научете се да използвате базата данни MySQL

  2. MySQL срещу MySQLi при използване на PHP

  3. Codeigniter транзакции

  4. Форматиране на командния ред на MySQL с UTF8

  5. Защо използването на подготвен изявление на mysql е по-сигурно от използването на обикновените escape функции?