Table des matières
Interroger et modifier les données json
Plusieurs fonctions associées
Exemples
Query
Jetons un œil aux modifications
Supprimer
Insérer
Mysql traite les données json
Maison base de données tutoriel mysql Comment interroger et modifier des données json avec Mysql

Comment interroger et modifier des données json avec Mysql

Jun 02, 2023 pm 08:19 PM
mysql json

    Interroger et modifier les données json

    • Utilisez le champ->'Attribut $.json' pour interroger les conditions

    • Utilisez la requête de fonction json_extract, json_extract(field, "Attribut $.json")

    • Requête basée sur un tableau json, utilisez JSON_CONTAINS(field, JSON_OBJECT('jsonattribut', "content")) : [{}] pour interroger cette forme de tableau json

    • MySQL 5.7 ou supérieur prend en charge les opérations JSON, et l'ajout du type de stockage JSON

    • Les bases de données générales utiliseront le type JSON ou le type TEXTE pour stocker les données de type JSON

    Plusieurs fonctions associées

    Comment interroger et modifier des données json avec Mysql

    Exemples

    Comment interroger et modifier des données json avec Mysql

    Je n'ai pas créé de json ici Format de champ , utilise à la place du texte pour stocker json.

    Attention : Si vous souhaitez utiliser le type JSON, les données stockées dans la colonne doivent être conformes au format JSON, sinon une erreur se produira. 2) Le type de données JSON n'a pas de valeur par défaut.

    Insérez les données au format json dans cette colonne :

    {"age": "28", "pwd": "lisi", "name": "李四"}
    Copier après la connexion

    Query

    1,

    select * from `offcn_off_main` where json_extract(json_field,"$.name") = '李四'
    Copier après la connexion

    2,

    select * from `offcn_off_main` where json_field->'$.name' = '李四'
    Copier après la connexion

    Utilisez expliquer pour voir que l'index ne peut pas être utilisé.

    Il faut donc le modifier :

    mysql ne supporte pas nativement les index d'attributs dans les colonnes json, mais on peut indirectement créer des index pour certains attributs en json via les colonnes virtuelles de mysql. Le principe est de créer des index pour les attributs en json. Colonne virtuelle, puis créez un index pour la colonne virtuelle, créant ainsi indirectement un index pour l'attribut.

    Dans MySQL 5.7, deux types de colonnes générées sont pris en charge, à savoir la colonne générée virtuelle et la colonne générée stockée. La première enregistre uniquement la colonne générée dans le dictionnaire de données (métadonnées de la table) et ne conserve pas les données de cette colonne sur le disque. on ; ce dernier conservera la colonne générée sur le disque au lieu de la calculer à chaque lecture. Évidemment, cette dernière stocke des données qui peuvent être calculées à partir de données existantes, nécessite plus d'espace disque et n'a aucun avantage par rapport à la colonne virtuelle ---- (En fait, je pense qu'elle a toujours un avantage, après tout, elle nécessite moins de calculs de requêtes . )

    Par conséquent, dans MySQL 5.7, le type de colonne générée n'est pas spécifié et la valeur par défaut est la colonne virtuelle.

    Si vous avez besoin d'une colonne générée stockée, il peut être plus approprié de créer un index sur une colonne générée virtuelle. Dans des circonstances normales, une colonne générée virtuelle est utilisée, qui est également la méthode par défaut de MySQL.

    Le format est le suivant :

    fieldname <type> [ GENERATED ALWAYS ] AS ( <expression> ) [ VIRTUAL|STORED ] [ UNIQUE [KEY] ] [ [PRIMARY] KEY ] [ NOT NULL ] [ COMMENT <text> ]
    Copier après la connexion

    Me voici donc :

    ALTER TABLE &#39;off_main&#39; `names_virtual` VARCHAR(20) GENERATED ALWAYS AS (`json_field` ->> &#39;$.name&#39;) not null;
    Copier après la connexion

    Attention : Vous pouvez utiliser l'opérateur "»" pour référencer la clé (KEY) dans le champ JSON. Dans cet exemple, le champ virtuel names_virtual a été défini comme non nullable. Dans le travail réel, cela doit être déterminé en fonction de circonstances spécifiques. Parce que JSON lui-même est un objet de données faiblement structuré. Autrement dit, sa structure n’est pas figée.

    Ajouter un index au champ virtuel :

    CREATE INDEX `names` ON `off_main`(`names_virtual`);
    Copier après la connexion

    Notez que si le champ virtuel n'est pas ajouté lors de la création de la table, mais ajouté plus tard, lors de l'ajout de l'index, si le champ virtuel dans certaines lignes est nul, mais il l'est défini de manière à ce qu'il ne puisse pas être nul, l'index ne peut pas être créé avec succès et la colonne d'invite ne peut pas être nulle.

    Après avoir ajouté l'index, veuillez expliquer et vous verrez que l'index est utilisé et la valeur du virtuel Le champ changera automatiquement à mesure que les attributs du champ json seront modifiés.

    Jetons un œil aux modifications

    update off_main set json_field = json_set(json_field,&#39;$.phone&#39;, &#39;132&#39;) WHERE id = 45 
    //同时修改多个
    UPDATE offcn_off_main set json_field = json_set(json_field,&#39;$.name&#39;,456,&#39;$.age&#39;,&#39;bbb&#39;) WHERE id = 45
    Copier après la connexion

    json_set() Si la méthode existe, elle sera écrasée, et si elle n'existe pas, elle sera ajoutée.

    Supprimer

    UPDATE offcn_off_main set json_field = json_remove(json_field,&#39;$.pwd&#39;,&#39;$.phone&#39;) WHERE id = 45
    Copier après la connexion

    Insérer

    UPDATE offcn_off_main set json_field = json_insert(json_field,&#39;$.pwd&#39;,&#39;111&#39;) WHERE id = 45
    Copier après la connexion

    La différence entre l'insertion et la mise à jour est que les insertions qui n'existent pas seront ajoutées et celles existantes ne seront pas écrasées

    Mysql traite les données json

    1 Si la quantité de données est petite. , copiez les données json directement Dans le champ json de mysql, si les données sont trop volumineuses, les données json peuvent être analysées via Java et d'autres formulaires en arrière-plan, puis écrites dans la base de données.

    Opération de requête

    select *,json->&#39;$.features[0].geometry.rings&#39; as rings from JSON;
    Copier après la connexion

    Lire une partie des données d'une table et la stocker dans une autre table (une donnée)

    insert into DT_village(name, border) SELECT
      json->&#39;$.features[0].attributes.CJQYMC&#39;,json->&#39;$.features[0].geometry.rings&#39;
    from JSON;
    Copier après la connexion

    Lire les données json et les écrire dans la base de données (à ce moment, la forme de la fonction définie est utilisé pour exécuter la méthode, vous pouvez définir le montant)

    #清空数据库
    TRUNCATE table DT_village;
     
    #定义存储过程
    delimiter //
    DROP PROCEDURE IF EXISTS insert_test_val;
    ##num_limit 要插入数据的数量,rand_limit 最大随机的数值
    CREATE PROCEDURE insert_test_val()
      BEGIN
     
        DECLARE i int default 0;
        DECLARE a,b varchar(5000);
     
        WHILE i<10 do
          set a=CONCAT(&#39;$.features[&#39;,i,&#39;].attributes.CJQYMC&#39;);
          set b=CONCAT(&#39;$.features[&#39;,i,&#39;].geometry.rings&#39;);
          insert into DT_village(name, border) select
                  #json->&#39;$.features[0].attributes.CJQYMC&#39;,json->&#39;$.features[0].geometry.rings&#39;
                                                     # (json->a),(json->b)
       json_extract(json,a),json_extract(json,b)
          from JSON;
          set i = i + 1;
     
        END WHILE;
     
      END
    //
     
    #调用存储过程
    call insert_test_val();
    Copier après la connexion

    Appelez le curseur pour obtenir une ligne dans les données jsosn et effectuer l'opération d'insertion

    delimiter //
    drop procedure if exists StatisticStore;
    CREATE PROCEDURE StatisticStore()
      BEGIN
        #创建接收游标数据的变量
        declare j json;#存储json数据
        DECLARE i int default 0; #创建总数变量,记录执行次数,控制循环
        DECLARE a,b,c varchar(5000);#定义json数组中的某个数据的键值
     
        #创建结束标志变量
        declare done int default false;
        #创建游标
        declare cur cursor for select json from JSON where name = &#39;1&#39;;
        #指定游标循环结束时的返回值
        declare continue HANDLER for not found set done = true;
        #设置初始值
        set a=CONCAT(&#39;$.features[&#39;,i,&#39;].attributes.XZQDM&#39;);
        set b=CONCAT(&#39;$.features[&#39;,i,&#39;].attributes.XZQMC&#39;);
        set c=CONCAT(&#39;$.features[&#39;,i,&#39;]&#39;);
        #打开游标
        open cur;
        #开始循环游标里的数据
        read_loop:loop
          #根据游标当前指向的一条数据
          fetch cur into j;
          #判断游标的循环是否结束
          if done then
            leave read_loop;#跳出游标循环
          end if;
          #这里可以做任意你想做的操作
          WHILE i<11 do
            insert into dt_border(xzq_code,name,border) select
                                                               json_extract(j,a),json_extract(j,b),json_extract(j,c)
            from JSON;
            set i = i + 1;
          END WHILE;
          #结束游标循环
        end loop;
        #关闭游标
        close cur;
     
        #输出结果
        select j,i;
      END;
    #调用存储过程
    call StatisticStore();
    Copier après la connexion

    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 de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    AI Hentai Generator

    AI Hentai Generator

    Générez AI Hentai gratuitement.

    Article chaud

    R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Meilleurs paramètres graphiques
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Comment réparer l'audio si vous n'entendez personne
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Comment déverrouiller tout dans Myrise
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    Éditeur de code facile à utiliser et gratuit

    SublimeText3 version chinoise

    SublimeText3 version chinoise

    Version chinoise, très simple à utiliser

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP

    Dreamweaver CS6

    Dreamweaver CS6

    Outils de développement Web visuel

    SublimeText3 version Mac

    SublimeText3 version Mac

    Logiciel d'édition de code au niveau de Dieu (SublimeText3)

    La relation entre l'utilisateur de MySQL et la base de données La relation entre l'utilisateur de MySQL et la base de données Apr 08, 2025 pm 07:15 PM

    Dans la base de données MySQL, la relation entre l'utilisateur et la base de données est définie par les autorisations et les tables. L'utilisateur a un nom d'utilisateur et un mot de passe pour accéder à la base de données. Les autorisations sont accordées par la commande Grant, tandis que le tableau est créé par la commande Create Table. Pour établir une relation entre un utilisateur et une base de données, vous devez créer une base de données, créer un utilisateur, puis accorder des autorisations.

    Intégration RDS MySQL avec Redshift Zero ETL Intégration RDS MySQL avec Redshift Zero ETL Apr 08, 2025 pm 07:06 PM

    Simplification de l'intégration des données: AmazonrDSMysQL et l'intégration Zero ETL de Redshift, l'intégration des données est au cœur d'une organisation basée sur les données. Les processus traditionnels ETL (extrait, converti, charge) sont complexes et prennent du temps, en particulier lors de l'intégration de bases de données (telles que AmazonrDSMysQL) avec des entrepôts de données (tels que Redshift). Cependant, AWS fournit des solutions d'intégration ETL Zero qui ont complètement changé cette situation, fournissant une solution simplifiée et à temps proche pour la migration des données de RDSMySQL à Redshift. Cet article plongera dans l'intégration RDSMYSQL ZERO ETL avec Redshift, expliquant comment il fonctionne et les avantages qu'il apporte aux ingénieurs de données et aux développeurs.

    MySQL: la facilité de gestion des données pour les débutants MySQL: la facilité de gestion des données pour les débutants Apr 09, 2025 am 12:07 AM

    MySQL convient aux débutants car il est simple à installer, puissant et facile à gérer les données. 1. Installation et configuration simples, adaptées à une variété de systèmes d'exploitation. 2. Prise en charge des opérations de base telles que la création de bases de données et de tables, d'insertion, d'interrogation, de mise à jour et de suppression de données. 3. Fournir des fonctions avancées telles que les opérations de jointure et les sous-questionnaires. 4. Les performances peuvent être améliorées par l'indexation, l'optimisation des requêtes et le partitionnement de la table. 5. Prise en charge des mesures de sauvegarde, de récupération et de sécurité pour garantir la sécurité et la cohérence des données.

    Comment remplir le nom d'utilisateur MySQL et le mot de passe Comment remplir le nom d'utilisateur MySQL et le mot de passe Apr 08, 2025 pm 07:09 PM

    Pour remplir le nom d'utilisateur et le mot de passe MySQL: 1. Déterminez le nom d'utilisateur et le mot de passe; 2. Connectez-vous à la base de données; 3. Utilisez le nom d'utilisateur et le mot de passe pour exécuter des requêtes et des commandes.

    L'optimisation des requêtes dans MySQL est essentielle pour améliorer les performances de la base de données, en particulier lorsqu'elle traite avec de grands ensembles de données L'optimisation des requêtes dans MySQL est essentielle pour améliorer les performances de la base de données, en particulier lorsqu'elle traite avec de grands ensembles de données Apr 08, 2025 pm 07:12 PM

    1. Utilisez l'index correct pour accélérer la récupération des données en réduisant la quantité de données numérisées SELECT * FROMMLOYEESEESHWHERELAST_NAME = 'SMITH'; Si vous recherchez plusieurs fois une colonne d'une table, créez un index pour cette colonne. If you or your app needs data from multiple columns according to the criteria, create a composite index 2. Avoid select * only those required columns, if you select all unwanted columns, this will only consume more server memory and cause the server to slow down at high load or frequency times For example, your table contains columns such as created_at and updated_at and timestamps, and then avoid selecting * because they do not require inefficient query se

    Puis-je récupérer le mot de passe de la base de données dans Navicat? Puis-je récupérer le mot de passe de la base de données dans Navicat? Apr 08, 2025 pm 09:51 PM

    Navicat lui-même ne stocke pas le mot de passe de la base de données et ne peut récupérer que le mot de passe chiffré. Solution: 1. Vérifiez le gestionnaire de mots de passe; 2. Vérifiez la fonction "Remember Motway" de Navicat; 3. Réinitialisez le mot de passe de la base de données; 4. Contactez l'administrateur de la base de données.

    Comprendre les propriétés acides: les piliers d'une base de données fiable Comprendre les propriétés acides: les piliers d'une base de données fiable Apr 08, 2025 pm 06:33 PM

    Une explication détaillée des attributs d'acide de base de données Les attributs acides sont un ensemble de règles pour garantir la fiabilité et la cohérence des transactions de base de données. Ils définissent comment les systèmes de bases de données gérent les transactions et garantissent l'intégrité et la précision des données même en cas de plantages système, d'interruptions d'alimentation ou de plusieurs utilisateurs d'accès simultanément. Présentation de l'attribut acide Atomicité: une transaction est considérée comme une unité indivisible. Toute pièce échoue, la transaction entière est reculée et la base de données ne conserve aucune modification. Par exemple, si un transfert bancaire est déduit d'un compte mais pas augmenté à un autre, toute l'opération est révoquée. BeginTransaction; UpdateAccountSsetBalance = Balance-100Wh

    Comment voir Mysql Comment voir Mysql Apr 08, 2025 pm 07:21 PM

    Affichez la base de données MySQL avec la commande suivante: Connectez-vous au serveur: MySQL -U Username -P mot de passe Exécuter les bases de données Afficher les bases de données; Commande pour obtenir toutes les bases de données existantes Sélectionnez la base de données: utilisez le nom de la base de données; Tableau de vue: afficher des tables; Afficher la structure de la table: décrire le nom du tableau; Afficher les données: sélectionnez * dans le nom du tableau;

    See all articles