Testumgebung: MySQL8.0.19
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"}' );
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;
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%';
Ä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.
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.
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;
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;
SELECT id, content -> '$[*].key' AS 'key', content ->> '$[*].value' AS 'value' FROM json_demo WHERE id < 3 /* content.value的值中存在like'%34%'的值 */ AND content ->> '$[*].value' like '%34%' /* content.key的值中有4 */ AND JSON_OVERLAPS(content ->> '$[*].key', '4' );
Ä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.
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.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!