sql >> Databáze >  >> RDS >> Mysql

JSON_SET() vs JSON_INSERT() vs JSON_REPLACE() v MySQL:Jaký je rozdíl?

V MySQL existuje řada funkcí, které vám pomohou pracovat s dokumenty JSON. Patří mezi ně JSON_SET() , JSON_INSERT() a JSON_REPLACE() funkce.

Tyto tři funkce spolu souvisí, přesto se mírně liší.

Syntaxe

Nejprve je zde syntaxe všech tří funkcí:

JSON_SET(json_doc, cesta, hodnota[, cesta, hodnota] ...)JSON_INSERT(json_doc, cesta, hodnota[, cesta, hodnota] ...)JSON_REPLACE(json_doc, cesta, hodnota[, cesta, hodnota] ...)

Všechny tři funkce tedy přijímají stejné argumenty. K čemu tyto argumenty slouží:

  • json_doc je dokument JSON.
  • path je cesta prvku, pro který se mají vložit data nebo aktualizovat hodnotu na.
  • val je nová hodnota.

Rozdíl

Zde je rozdíl mezi těmito funkcemi:

  • JSON_SET() nahradí existující hodnoty a přidá neexistující hodnoty.
  • JSON_INSERT() vloží hodnoty, aniž by nahradil existující hodnoty.
  • JSON_REPLACE() nahradí pouze existující hodnoty.

V zásadě tedy to, kterou z nich použijete, závisí na tom, zda aktualizujete existující hodnotu nebo vkládáte novou (ačkoli JSON_SET() dělá obojí).

Příklad 1 – Vložení hodnoty

Zde jsou příklady, které demonstrují rozdíl mezi těmito třemi funkcemi.

JSON_SET()

Co se stane, když se pokusíme vložit novou hodnotu pomocí JSON_SET() :

SELECT JSON_SET('{"a":1, "b":2}', '$.c', 3) AS 'Result';

Výsledek:

+--------------------------+| Výsledek |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+ 

Takže to fungovalo perfektně.

JSON_INSERT()

Co se stane, když se pokusíme vložit novou hodnotu pomocí JSON_INSERT() :

SELECT JSON_INSERT('{"a":1, "b":2}', '$.c', 3) AS 'Result';

Výsledek:

+--------------------------+| Výsledek |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+ 

Přesně stejný výsledek jako u JSON_SET() .

JSON_REPLACE()

Co se stane, když se pokusíme vložit novou hodnotu pomocí JSON_REPLACE() :

SELECT JSON_REPLACE('{"a":1, "b":2}', '$.c', 3) AS 'Result';

Výsledek:

+-------------------+| Výsledek |+------------------+| {"a":1, "b":2} |+------------------+

V tomto případě nebyla nová hodnota vložena. Původní dokument JSON je vrácen beze změny. Je to proto, že tato funkce pouze nahrazuje existující hodnoty – nevkládá nové.

Příklad 2 – Aktualizace existující hodnoty

Nyní k aktualizaci stávajících hodnot.

JSON_SET()

Co se stane, když se pokusíme aktualizovat existující hodnotu pomocí JSON_SET() :

SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) AS 'Result';

Výsledek:

+-------------------+| Výsledek |+------------------+| {"a":1, "b":3} |+------------------+

Takže to opět fungovalo perfektně. Úspěšně jsme aktualizovali druhý pár klíč/hodnota novou hodnotou.

JSON_INSERT()

Co se stane, když se pokusíme aktualizovat existující hodnotu pomocí JSON_INSERT() :

SELECT JSON_INSERT('{"a":1, "b":2}', '$.b', 3) AS 'Result';

Výsledek:

+-------------------+| Výsledek |+------------------+| {"a":1, "b":2} |+------------------+

V tomto případě nebyla stávající hodnota aktualizována. Dokument JSON je vrácen beze změny. Je to proto, že JSON_INSERT() funkce pouze vkládá nové hodnoty – neaktualizuje stávající.

JSON_REPLACE()

Co se stane, když se pokusíme aktualizovat existující hodnotu pomocí JSON_REPLACE() :

SELECT JSON_REPLACE('{"a":1, "b":2}', '$.b', 3) AS 'Result';

Výsledek:

+-------------------+| Výsledek |+------------------+| {"a":1, "b":3} |+------------------+

Perfektně se aktualizuje.


  1. Proaktivní kontroly stavu serveru SQL Server, část 3:Nastavení instance a databáze

  2. Vícenásobné vložení SQL Oracle

  3. Jak opravit „Požadavek COMMIT TRANSACTION nemá odpovídající BEGIN TRANSACTION“ v SQL Server

  4. Konfigurace systému se nepodařilo inicializovat