Maison > Article > base de données > Nouvelles fonctionnalités de MySQL 5.7 | Colonne Json et colonne générée (Partie 1)
Préface à l'introduction de MySQL 5.7 json
MySQL5.7 ajoute deux nouveaux types de champs : Json et Generated La génération du type Generated est indissociable de Json. Sans le type Generated, le type Json l'est. plus puissant et productif. Il ne peut pas être utilisé dans Json car Json ne prend pas en charge les index, mais si vous souhaitez interroger les données dans Json, sans index, il s'agit d'une analyse de table complète. En termes d'efficacité d'exécution, cela ne peut certainement pas être le cas. utilisé dans un environnement de production. Cependant, avec le type Généré, c'est différent. Le type Généré est simplement un champ virtuel. La valeur ne peut pas être mise à jour. La valeur provient d'autres champs ou de calculs ou de conversions entre champs. . En utilisant les caractéristiques de Generated, il peut être indirectement ajouté à Json. La clé dans le type crée un index pour résoudre le problème selon lequel Json ne peut pas créer d'index. Bref, la génération du type Generated apporte un support aux problématiques d'indexation du type Json. Les valeurs JSON incluent plusieurs formats tels que la valeur unique, le tableau, le tuple, le format Json annoté, etc.
Objectivement parlant, l'émergence du type Json offre une commodité pour la recherche et le développement et fournit un support similaire à NoSQL. Cependant, du point de vue de l'exploitation et de la maintenance du DBA, cela peut être un problème lié à. les grands champs tels que le texte. Le problème est le même. json peut devenir une variante du champ de texte dans la production réelle. J'espère que DBA accordera une attention particulière à ce type dans l'utilisation future de 5.7.
Créer une table avec des champs JSON
Créer directement une table de test avec des champs JSON
CREATE TABLE json_test ( id int(11) NOT NULL AUTO_INCREMENT, group_name varchar(20) DEFAULT NULL, user_info json DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ou ajouter un champ de type JSON à la table
ALTER TABLE json_test ADD COLUMN user_info JSON DEFAULT NULL;
Insérer des données
Requête liée au champ JSON
1. Interroger tous les résultats
2 : Requête JSON_EXTRACT
JSON_EXTRACT Cette fonction est principalement utilisée pour la correspondance exacte, comme rechercher des enregistrements avec age=21 dans user_info ou interroger des enregistrements avec name='wangwei', ou un nom comme ' %wangwei% ' Requête floue :
SELECT * FROM json_test WHERE JSON_EXTRACT(user_info,'$.age')=21;
Lorsque la valeur est un tableau, la valeur de position de départ du tableau est 0. À la en même temps, MySQL a ajouté -> dans la version 5.5.9, offrant une autre façon d'écrire un équivalent à JSON_EXTRACT :
SELECT * FROM json_test WHERE user_info->"$.age"=21;
3. Requête JSON_SEARCH
Fonction de recherche de chaîne JSON_SEARCH, trouve les enregistrements dont la valeur clé dans json est la chaîne 'wangwei', qui est une correspondance exacte ; l'ajout de % signifie quelque chose comme :
SELECT * FROM json_test WHERE JSON_SEARCH(user_info,'all','wangwei') IS NOT NULL; SELECT * FROM json_test WHERE JSON_SEARCH(user_info,'all','wangwei%') IS NOT NULL; SELECT * FROM json_test WHERE JSON_SEARCH(user_info,'all','%wangwei%') IS NOT NULL;
4. JSON_CONTAINS détermine si la clé contient la valeur spécifiée.
JSON_CONTAINS détermine si la clé contient la valeur spécifiée. La valeur de retour est 0 ou 1 ou nulle. ne sont pas inclus, inclus et la clé spécifiée n'existe pas dans une situation centralisée :
5 JSON_CONTAINS_PATH détermine si la clé existe dans le champ
. JSON_CONTAINS_PATH Détermine si la clé existe dans le champ. La valeur de retour est 0 et 1. Le format est JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path]...). un dans le chemin, ce sera 1. Sinon c'est 0 ; si c'est tout, ça doit tout inclure, et le retour est 1, sinon c'est 0 :
6. Requête de longueur JSON_LENGTH
JSON_LENGTH est utilisé Calculez la longueur du champ JSON :
7 : Requête de niveau JSON_DEPTH
JSON_DEPTH est principalement utilisé pour interroger le niveau du champ Json. La valeur vide est 1, donc dans des circonstances normales, le type de champ Json n'est pas vide. Le résultat de la requête de cette valeur doit être supérieur ou égal à 2 :
8 : JSON_TYPE interroge le type de données de la valeur clé dans le champ Json
JSON_TYPE est principalement utilisé pour interroger le type de données de la valeur clé dans le type de champ Json . Les types affichés sont classés comme suit :
Types purement JSON :
OBJECT : objets JSON;ARRAY : tableaux JSON;BOOLEAN : les littéraux vrai et faux JSON;NULL : le littéral nul JSON. et INT et BIGINT ;DOUBLE : scalaires MySQL DECIMAL et NUMERIC
Types temporels :
DATETIME : scalaires MySQL DATETIME et TIMESTAMP ;DATE : scalaires MySQL DATE ;TIME : scalaires MySQL TIME
Types de chaînes :
STRING : scalaires de type de caractères MySQL utf8 ;CHAR, VARCHAR, TEXT , ENUM et SET
Types binaires :
BLOB : scalaires de type binaire MySQL ;BINARY, VARBINARY, BLOB;BIT : scalaires MySQL BIT
Tous les autres types :
OPAQUE (bits bruts)
9. JSON_UNQUOTE supprime les caractères spéciaux avant et après.
JSON_UNQUOTE est principalement utilisé pour supprimer les caractères spéciaux avant et après, formater la valeur, prend actuellement en charge les caractères suivants :
Ce qui précède sont les nouvelles fonctionnalités de MySQL 5.7 | Le contenu de la colonne Json et de la colonne générée (partie 1), veuillez faire attention au site Web PHP chinois (www.php.cn) pour plus de contenu connexe !