Maison >base de données >tutoriel mysql >Comment utiliser les champs de type JSON dans MySQL

Comment utiliser les champs de type JSON dans MySQL

WBOY
WBOYavant
2023-04-17 18:52:051211parcourir

Environnement de test : MySQL8.0.19

Préparation

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"}' );

Opérations de base des objets JSON

Interroger la valeur du champ spécifié

/* 基础查询 */
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;

Comment utiliser les champs de type JSON dans MySQL

CONSEILS :

  • -&g t;et-> ;> ; est une syntaxe conçue par MySQL, dont -> est pris en charge dans MySQL5.7 et ->>

  • -> Équivalent à JSON_EXTRACT(), lorsque le champ de requête est une chaîne, la valeur de retour aura également "".

  • ->> Équivalent à JSON_UNQUOTE(JSON_EXTRACT()), lorsque le champ de requête est une chaîne, la valeur de retour n'aura pas "".

Utilisé pour les requêtes conditionnelles

contenu -> '$.key' peut être considéré comme un champ et peut essentiellement effectuer des opérations qui peuvent être effectuées sur un champ.

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%';

Comment utiliser les champs de type JSON dans MySQL

Modifiez la valeur de champ spécifiée

/* 修改 */
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;

Comment utiliser les champs de type JSON dans MySQL

CONSEILS :

  • JSON_REPLACE et JSON_SET peuvent être utilisés pour modifier une certaine valeur de champ. La différence est que l'opération n'est pas valide lorsque JSON_REPLACE remplace. les attributs inexistants ; JSON_SET insérera l'attribut inexistant.

  • Donc, JSON_SET peut également être utilisé pour ajouter des attributs, similaires à JSON_INSERT. La différence est que l'opération JSON_INSERT échouera si un attribut existant est inséré, tandis que JSON_SET le remplacera.

Ajouter un élément

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;

Comment utiliser les champs de type JSON dans MySQL

Opération de tableau JSON

Interroger la valeur de champ spécifiée

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;

Comment utiliser les champs de type JSON dans MySQL

pour une requête conditionnelle

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; );

Comment utiliser les champs de type JSON dans MySQL

Modifier la valeur du champ spécifié

Les opérations de base sont similaires aux objets JSON, qui consistent à ajouter le bit d'index correspondant '$[0]' après '$', et '$[*]' pour tout spécifier. Si le tableau contient un tableau, vous pouvez spécifier les éléments du tableau profond via '$[1][2][3]'.

Comment utiliser les champs de type JSON dans MySQL

Ajouter des éléments

JSON_ARRAY_APPEND et JSON_ARRAY_INSERT peuvent ajouter des éléments de tableau. La différence est que JSON_ARRAY_APPEND n'a pas besoin de spécifier le bit d'index, auquel cas il sera ajouté à la dernière position ; JSON_ARRAY_INSERT doit spécifier le bit d'index, et une erreur sera signalée s'il n'est pas spécifié.

JSON_ARRAY_APPEND est ajouté après le bit d'index spécifié, tandis que JSON_ARRAY_INSERT est inséré avant le bit d'index spécifié.

Comment utiliser les champs de type JSON dans MySQL

Plus d'actions Document SON

JSON_ARRAY_INSERT()JSON_CONTAINS()Si le document JSON contient un objet spécifique dans le cheminSi le document JSON contient des données dans le cheminJSON Profondeur maximale du document Renvoyer les données du document JSONInsérer des données dans le document JSONAr rayon de clés dans le document JSON Le nombre d'éléments dans le document JSON Fusionner les documents JSON en conservant les clés en double. Synonymes obsolètes pour JSON_MERGE_PRESERVE()Fusionner les documents JSON, remplacer les valeurs des clés en doubleFusionner les documents JSON, conserver les clés en double Créez un objet JSON Compare deux documents JSON et renvoie VRAI (1) s'ils ont des paires clé-valeur ou des éléments de tableau en commun, sinon renvoie FALSE ( 0 ) Imprimer le document JSON dans un format facile à lire Citer le document JSON Supprimer les données du document JSON Remplacer les valeurs dans un document JSONValide un document JSON par rapport à un schéma JSON renvoie TRUE/1 si le document est validé par rapport au schéma ; ; sinon, renvoie FALSE/0. Valider les documents JSON par rapport au schéma JSON ; renvoyer un rapport sur les résultats de la validation au format JSON, y compris le succès ou l'échec et la raison de l'échec Document JSON Chemin vers la valeur médiane Insertion de données dans un document JSON Espace libre dans la représentation binaire de la valeur de la colonne JSON après une mise à jour partielleEspace utilisé pour stocker la représentation binaire du document JSONRenvoyer les données d'une expression JSON sous forme de table relationnelleType de valeur JSONDéréférencement des valeurs JSONLa valeur JSON est-elle valide ?Extrait la valeur du document JSON à l'emplacement pointé par le chemin fourni ; comme VARCHAR (512) ou le type spécifié renvoie cette valeur Renvoie si le premier opérande correspond à un élément du tableau JSON passé comme deuxième opérande true(1), sinon renvoie false(0)
Insérer dans le tableau JSON
JSON_CONTAINS_PATH()
JSON_DEPTH()
JSON_EXTRACT()
JSON_INSERT()
JSON_KEYS()
JSON_LENGTH()
JSON_MERGE() (obsolète)
JSON_MERGE_PATCH()
JSON_MERGE_PRESERVE()
J SON_OBJECT()
JSON_OVERLAPS() (Introduit dans la version 8.0.17)
JSON_PRETTY()
JSON_QUOTE()
JSON_REMOVE()
JSON_REPLACE()
JSON_SCHEMA_VALID() (Introduit dans la version 8.0.17)
JSON_SCHEMA_VALIDATION_REPORT() (Introduit dans la version 8.0.17)
JSON_SEARCH()
JSON_SET()
JSON_STORAGE_FREE()
JSON_ STOCKAGE_SIZE( )
JSON_TABLE()
JSON_TYPE()
JSON_UNQUOTE ()
JSON_VALID()
JSON_VALUE() (Introduit dans la version 8.0.21)
MEMBER OF() (Introduit dans la version 8.0.17)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer