Heim  >  Artikel  >  Datenbank  >  So verwenden Sie Felder vom Typ JSON in MySQL

So verwenden Sie Felder vom Typ JSON in MySQL

WBOY
WBOYnach vorne
2023-04-17 18:52:051136Durchsuche

Testumgebung: MySQL8.0.19

Vorbereitung

CREATE TABLE json_demo ( 
	`id` INT ( 11 ) NOT NULL PRIMARY KEY, 
	`content` json NOT NULL 
);
INSERT INTO json_demo ( id, content )
VALUES
	/*这条是数组*/
	( 1, '[{"key": 1, "order": 1, "value": "34252"},{"key": 2, "order": 2, "value": "23423"}]' ),
	/*这条是数组*/
	( 2, '[{"key": 4, "order": 4, "value": "234"},{"key": 5, "order": 5, "value": "234324523"}]' ),
	/*这条是对象*/
	( 3, '{"key": 3, "order": 3, "value": "43242"}' ),
	/*这条是对象*/
	( 4, '{"key": 6, "order": 6, "value": "5423"}' );

Grundlegende Operationen von JSON-Objekten

Fragen Sie den angegebenen Feldwert ab

/* 基础查询 */
SELECT
	content -> '$.key' AS 'key',
	JSON_EXTRACT(content, '$.key') AS 'key2',
	content -> '$.value' AS 'value',
	JSON_EXTRACT(content, '$.value') AS 'value2',
	content ->> '$.value' AS 'value3',
	JSON_UNQUOTE(JSON_EXTRACT(content, '$.value')) AS 'value4'
FROM
	json_demo 
WHERE
	id > 2;

So verwenden Sie Felder vom Typ JSON in MySQL

TIPPS:

  • -&g t;und-> ;> ist eine von MySQL entwickelte Syntax, von der -> in MySQL5.7 und ->> unterstützt wird.

  • -> Äquivalent zu JSON_EXTRACT(), wenn das Abfragefeld eine Zeichenfolge ist, hat der Rückgabewert auch „“.

  • ->> Entspricht JSON_UNQUOTE(JSON_EXTRACT()), wenn das Abfragefeld eine Zeichenfolge ist, hat der Rückgabewert kein „“.

Wird für bedingte Abfragen verwendet

Inhalt -> '$.key' kann als Feld betrachtet werden und kann grundsätzlich Operationen ausführen, die auf einem Feld ausgeführt werden können.

SELECT
	id,
	content -> '$.key' AS 'key',
	content ->> '$.value' AS 'value3'
FROM
	json_demo 
WHERE
	id > 2
	AND content -> '$.key' > 1
	AND content -> '$.value' like '%2%';

So verwenden Sie Felder vom Typ JSON in MySQL

Ändern Sie den angegebenen Feldwert.

/* 修改 */
UPDATE json_demo 
SET content = JSON_REPLACE(
	content,
	/* 将content.key值 + 1 */
	'$.key', content -> '$.key' + 1,
	/* 将content.value值后拼接'abc' */
	'$.value', concat(content ->> '$.value', 'abc')
) WHERE id = 3;
/* JSON_SET也可以 */
UPDATE json_demo 
SET content = JSON_SET(
	content,
	/* 将content.key值 + 1 */
	'$.key', content -> '$.key' + 1,
	/* 将content.value值后拼接'abc' */
	'$.value', concat(content ->> '$.value', 'abc')
) WHERE id = 3;
/* 查询修改结果 */
SELECT id,content,content -> '$.key' AS 'key',content ->> '$.value' AS 'value3'
FROM json_demo WHERE id = 3;
/* 重新赋值 */
UPDATE json_demo SET 
content = JSON_REPLACE(content,'$.key',3,'$.value','43242') WHERE id = 3;
ACE ersetzt nicht vorhandene Attribute; JSON_SET fügt das nicht vorhandene Attribut ein.

So verwenden Sie Felder vom Typ JSON in MySQL

JSON_SET kann also auch zum Anhängen von Attributen verwendet werden, ähnlich wie JSON_INSERT. Der Unterschied besteht darin, dass der JSON_INSERT-Vorgang fehlschlägt, wenn ein vorhandenes Attribut eingefügt wird, während JSON_SET es ersetzt.

  • Element anhängen

    UPDATE json_demo 
    SET content = JSON_INSERT(content, '$.key', 234)
    WHERE id = 3;
    
    SELECT id,content,content -> '$.key' AS 'key' FROM json_demo WHERE id = 3;
    
    UPDATE json_demo 
    SET content = JSON_INSERT(content, '$.temp', 234)
    WHERE id = 3;
    
    SELECT id,content,content -> '$.key' AS 'key' FROM json_demo WHERE id = 3;
    
    UPDATE json_demo 
    SET content = JSON_SET(content, '$.temp2', 432)
    WHERE id = 3;
    
    SELECT id,content,content -> '$.key' AS 'key' FROM json_demo WHERE id = 3;
  • JSON-Array-Operation

Fragen Sie den angegebenen Feldwert ab

SELECT
	id,
	content -> '$[*].key' AS 'key',
	content ->> '$[*].value' AS 'value',
	content -> '$[0].key' AS 'key2',
	content ->> '$[0].value' AS 'value2',
	/* 查询数组长度 */
	JSON_LENGTH(content) AS 'length'
FROM
	json_demo 
WHERE
	id < 3;

So verwenden Sie Felder vom Typ JSON in MySQL

für bedingte Abfrage

SELECT
	id,
	content -> &#39;$[*].key&#39; AS &#39;key&#39;,
	content ->> &#39;$[*].value&#39; AS &#39;value&#39;
FROM
	json_demo 
WHERE
	id < 3
	/* content.value的值中存在like&#39;%34%&#39;的值 */
	AND content ->> &#39;$[*].value&#39; like &#39;%34%&#39;
	/* content.key的值中有4 */
	AND JSON_OVERLAPS(content ->> &#39;$[*].key&#39;, &#39;4&#39; );

So verwenden Sie Felder vom Typ JSON in MySQLÄndern Sie den angegebenen Feldwert

Die Grundoperationen ähneln JSON-Objekten, nämlich das Hinzufügen des entsprechenden Indexbits „$[0]“ nach „$“ und „$[*]“, um alles anzugeben. Wenn das Array ein Array enthält, können Sie die tiefen Array-Elemente über „$[1][2][3]“ angeben.

So verwenden Sie Felder vom Typ JSON in MySQL

Elemente anhängen

Sowohl JSON_ARRAY_APPEND als auch JSON_ARRAY_INSERT können Array-Elemente anhängen. Der Unterschied besteht darin, dass JSON_ARRAY_APPEND das Indexbit nicht angeben muss. In diesem Fall wird es an die letzte Position angehängt. JSON_ARRAY_INSERT muss das Indexbit angeben. Wenn es nicht angegeben wird, wird ein Fehler gemeldet.

JSON_ARRAY_APPEND wird nach dem angegebenen Indexbit angehängt, während JSON_ARRAY_INSERT vor dem angegebenen Indexbit eingefügt wird.

So verwenden Sie Felder vom Typ JSON in MySQL

Mehr Aktionen

zurückgeben
Name Beschreibung
JSON_ARRAY() JSON-Array erstellen
JSON_ARRAY_APPEND() Daten anhängen SON SON-Dokument
JSON_ARRAY_INSERT() In JSON-Array einfügen
JSON_CONTAINS() Ob das JSON-Dokument ein bestimmtes Objekt im Pfad enthält
JSON_CONTAINS_PATH() Ob das JSON-Dokument Daten im Pfad enthält
JSON_DEPTH() JSON Maximale Tiefe des Dokuments
JSON_EXTRACT() Daten aus JSON-Dokument zurückgeben
JSON_INSERT() Daten in JSON einfügen. Dokument
JSON_KEYS() Schlüsselarray im JSON-Dokument
JSON_LENGTH() Die Anzahl der Elemente im JSON-Dokument
JSON_MERGE() (veraltet) JSON-Dokumente zusammenführen und dabei doppelte Schlüssel behalten. Veraltete Synonyme für JSON_MERGE_PRESERVE()
JSON_MERGE_PATCH() JSON-Dokumente zusammenführen und Werte für doppelte Schlüssel ersetzen
JSON_MERGE_PRESERVE() JSON-Dokumente zusammenführen, doppelte Schlüssel beibehalten
JSON_OBJECT() Erstellen Sie ein JSON-Objekt
JSON_OVERLAPS() (Eingeführt in 8.0.17) Vergleicht zwei JSON-Dokumente und gibt TRUE (1) zurück, wenn sie Schlüssel-Wert-Paare oder Array-Elemente gemeinsam haben, andernfalls wird FALSE ( 0) zurückgegeben )
JSON_PRETTY() JSON-Dokument in leicht lesbarem Format drucken
JSON_QUOTE() JSON-Dokument zitieren
JSON_REMOVE() Daten aus JSON-Dokument entfernen.
JSON_REPLACE() Ersetzen Sie Werte in einem JSON-Dokument
JSON_SCHEMA_VALID() (Eingeführt in 8.0.17) Validiert ein JSON-Dokument anhand eines JSON-Schemas; gibt TRUE/1 zurück, wenn das Dokument anhand des Schemas validiert wird ; andernfalls wird FALSE/0 zurückgegeben.
JSON_SCHEMA_VALIDATION_REPORT() (eingeführt in 8.0.17) Validiert JSON-Dokumente anhand des JSON-Schemas; gibt einen Bericht über die Validierungsergebnisse im JSON-Format zurück, einschließlich Erfolg oder Misserfolg und dem Grund für den Fehler
JSON_SEARCH() JSON-Dokumentpfad zum Medianwert
JSON_SET() Einfügen von Daten in ein JSON-Dokument
JSON_STORAGE_FREE() Freier Speicherplatz in der binären Darstellung des JSON-Spaltenwerts nach teilweiser Aktualisierung.
JSON _STORAGE_SIZE( ) Speicherplatz für die binäre Darstellung des JSON-Dokuments
JSON_TABLE() Daten aus einem JSON-Ausdruck als relationale Tabelle zurückgeben
JSON_TYPE() JSON-Wert. Typ
JSON_UNQUOT E (). Der angegebene Pfad; als VARCHAR (512) oder der angegebene Typ gibt diesen Wert zurück true(1), andernfalls false(0)

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Felder vom Typ JSON in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen