Maison > Article > base de données > Comment utiliser les champs de type JSON dans MySQL
Environnement de test : 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"}' );
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;
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%';
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;
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;
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;
pour une requête conditionnelle
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' );
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]'.
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é.
Plus d'actions Document SONInsé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!