Jadual Kandungan
Soal dan ubah suai data json
Beberapa fungsi berkaitan
Contoh
Query
Mari kita lihat pengubahsuaian
Padam
Sisipkan
Mysql memproses Data json
Rumah pangkalan data tutorial mysql Bagaimana untuk bertanya dan mengubah suai data json dengan Mysql

Bagaimana untuk bertanya dan mengubah suai data json dengan Mysql

Jun 02, 2023 pm 08:19 PM
mysql json

    Soal dan ubah suai data json

    • Gunakan medan->'$.json attribute' untuk pertanyaan syarat

    • Gunakan fungsi json_extract untuk membuat pertanyaan, json_extract(medan, "atribut $.json")

    • Pertanyaan berdasarkan tatasusunan json, gunakan JSON_CONTAINS(medan, JSON_OBJECT( 'json attribute', "content")): [{}] Tanya bentuk tatasusunan json ini

    • MySQL 5.7 atau lebih tinggi menyokong operasi JSON dan menambah jenis storan JSON

    • Pangkalan data umum akan menggunakan jenis JSON atau jenis TEKS untuk menyimpan data jenis JSON

    Beberapa fungsi berkaitan

    Bagaimana untuk bertanya dan mengubah suai data json dengan Mysql

    Contoh

    Bagaimana untuk bertanya dan mengubah suai data json dengan Mysql

    Saya tidak mencipta format medan json di sini, tetapi menggunakan teks untuk menyimpan json.

    Sila ambil perhatian: Jika anda ingin menggunakan jenis JSON, data yang disimpan dalam lajur mesti mematuhi format JSON, jika tidak, ralat akan berlaku. 2) Jenis data JSON tidak mempunyai nilai lalai.

    Masukkan data format json ke dalam lajur ini:

    {"age": "28", "pwd": "lisi", "name": "李四"}
    Salin selepas log masuk

    Query

    1,

    select * from `offcn_off_main` where json_extract(json_field,"$.name") = '李四'
    Salin selepas log masuk

    2,

    select * from `offcn_off_main` where json_field->'$.name' = '李四'
    Salin selepas log masuk

    Gunakan terangkan untuk melihat bahawa indeks tidak boleh digunakan.

    Jadi ia perlu diubah suai:

    mysql tidak menyokong indeks atribut secara asli dalam lajur json, tetapi kami secara tidak langsung boleh mengindeks atribut tertentu dalam json melalui lajur maya mysql Prinsip mencipta indeks untuk atribut adalah untuk mencipta lajur maya untuk atribut dalam json, dan kemudian mencipta indeks untuk lajur maya, dengan itu secara tidak langsung mencipta indeks untuk atribut.

    Dalam MySQL 5.7, dua jenis Lajur Terhasil disokong, iaitu Lajur Terhasil Maya dan Lajur Terhasil Tersimpan yang pertama hanya menyimpan Lajur Terhasil dalam kamus data (metadata jadual) dan tidak menyimpan lajur ini daripada data Berterusan ke cakera; Jelas sekali, yang terakhir menyimpan data yang boleh dikira daripada data sedia ada, memerlukan lebih banyak ruang cakera, dan tidak mempunyai kelebihan berbanding Lajur Maya----(Malah, saya fikir masih ada kelebihan, lagipun, akan ada kurang pertanyaan pengiraan. )

    Oleh itu, dalam MySQL 5.7, jenis Lajur Dihasilkan tidak ditentukan, dan lalainya ialah Lajur Maya.

    Jika Stored Generated Golumn diperlukan, mungkin lebih sesuai untuk mencipta indeks pada Virtual Generated Column Dalam keadaan biasa, Virtual Generated Column digunakan, yang juga merupakan kaedah lalai MySQL.

    Formatnya adalah seperti berikut:

    fieldname <type> [ GENERATED ALWAYS ] AS ( <expression> ) [ VIRTUAL|STORED ] [ UNIQUE [KEY] ] [ [PRIMARY] KEY ] [ NOT NULL ] [ COMMENT <text> ]
    Salin selepas log masuk

    Jadi di sini saya:

    ALTER TABLE &#39;off_main&#39; `names_virtual` VARCHAR(20) GENERATED ALWAYS AS (`json_field` ->> &#39;$.name&#39;) not null;
    Salin selepas log masuk

    Sila ambil perhatian: Anda boleh menggunakan operator "»" untuk merujuk kunci dalam medan JSON (KEY). Dalam contoh ini, medan maya names_virtual telah ditakrifkan sebagai tidak boleh dibatalkan. Dalam kerja sebenar, ia mesti ditentukan berdasarkan keadaan tertentu. Kerana JSON itu sendiri adalah objek data berstruktur lemah. Dengan kata lain, strukturnya tidak tetap.

    Tambah indeks pada medan maya:

    CREATE INDEX `names` ON `off_main`(`names_virtual`);
    Salin selepas log masuk

    Perhatikan bahawa jika medan maya tidak ditambah apabila jadual dibuat, tetapi ditambah kemudian, apabila menambah indeks, jika medan maya dalam beberapa baris adalah batal, Tetapi jika ia ditetapkan kepada tidak menjadi nol, maka indeks tidak boleh dibuat dengan jayanya, dan lajur gesaan tidak boleh menjadi batal

    Selepas menambah indeks, terangkan dan anda akan melihat bahawa indeks digunakan, dan nilai medan maya akan berubah dengan Sifat medan json berubah secara automatik apabila diubah suai.

    Mari kita lihat pengubahsuaian

    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
    Salin selepas log masuk

    Jika kaedah json_set() wujud, ia akan ditimpa, dan jika ia tidak wujud, ia akan ditambah.

    Padam

    UPDATE offcn_off_main set json_field = json_remove(json_field,&#39;$.pwd&#39;,&#39;$.phone&#39;) WHERE id = 45
    Salin selepas log masuk

    Sisipkan

    UPDATE offcn_off_main set json_field = json_insert(json_field,&#39;$.pwd&#39;,&#39;111&#39;) WHERE id = 45
    Salin selepas log masuk

    Perbezaan antara sisipan dan kemas kini ialah sisipan yang tidak wujud akan ditambah, dan sisipan sedia ada tidak akan ditimpa

    Mysql memproses Data json

    1 Jika jumlah data adalah kecil, salin data json terus ke medan json mysql Jika data terlalu besar, anda boleh menghuraikan data json java dan bentuk latar belakang lain, dan kemudian tuliskannya ke pangkalan data.

    Operasi pertanyaan

    select *,json->&#39;$.features[0].geometry.rings&#39; as rings from JSON;
    Salin selepas log masuk

    Baca sebahagian daripada data dari satu jadual dan simpan dalam jadual lain (satu keping data)

    insert into DT_village(name, border) SELECT
      json->&#39;$.features[0].attributes.CJQYMC&#39;,json->&#39;$.features[0].geometry.rings&#39;
    from JSON;
    Salin selepas log masuk

    Baca data json dan tuliskannya ke pangkalan data (pada masa ini Kaedah ini dilaksanakan dalam bentuk fungsi yang ditentukan, dan jumlahnya boleh ditakrifkan)

    #清空数据库
    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();
    Salin selepas log masuk

    Panggil kursor untuk mendapatkan baris dalam data jsosn, dan lakukan operasi sisipan

    rreeee

    Atas ialah kandungan terperinci Bagaimana untuk bertanya dan mengubah suai data json dengan Mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Tetapan grafik terbaik
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Cara Membuka Segala -galanya Di Myrise
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Hubungan antara pengguna dan pangkalan data MySQL Hubungan antara pengguna dan pangkalan data MySQL Apr 08, 2025 pm 07:15 PM

    Dalam pangkalan data MySQL, hubungan antara pengguna dan pangkalan data ditakrifkan oleh kebenaran dan jadual. Pengguna mempunyai nama pengguna dan kata laluan untuk mengakses pangkalan data. Kebenaran diberikan melalui perintah geran, sementara jadual dibuat oleh perintah membuat jadual. Untuk mewujudkan hubungan antara pengguna dan pangkalan data, anda perlu membuat pangkalan data, membuat pengguna, dan kemudian memberikan kebenaran.

    Integrasi RDS MySQL dengan Redshift Zero ETL Integrasi RDS MySQL dengan Redshift Zero ETL Apr 08, 2025 pm 07:06 PM

    Penyederhanaan Integrasi Data: AmazonRDSMYSQL dan Integrasi Data Integrasi Zero ETL Redshift adalah di tengah-tengah organisasi yang didorong oleh data. Proses tradisional ETL (ekstrak, menukar, beban) adalah kompleks dan memakan masa, terutamanya apabila mengintegrasikan pangkalan data (seperti Amazonrdsmysql) dengan gudang data (seperti redshift). Walau bagaimanapun, AWS menyediakan penyelesaian integrasi ETL sifar yang telah mengubah keadaan ini sepenuhnya, menyediakan penyelesaian yang mudah, hampir-sebenar untuk penghijrahan data dari RDSMYSQL ke redshift. Artikel ini akan menyelam ke integrasi RDSMYSQL Zero ETL dengan redshift, menjelaskan bagaimana ia berfungsi dan kelebihan yang dibawa kepada jurutera dan pemaju data.

    Cara Mengisi Nama Pengguna dan Kata Laluan MySQL Cara Mengisi Nama Pengguna dan Kata Laluan MySQL Apr 08, 2025 pm 07:09 PM

    Untuk mengisi nama pengguna dan kata laluan MySQL: 1. Tentukan nama pengguna dan kata laluan; 2. Sambungkan ke pangkalan data; 3. Gunakan nama pengguna dan kata laluan untuk melaksanakan pertanyaan dan arahan.

    MySQL: Kemudahan Pengurusan Data untuk Pemula MySQL: Kemudahan Pengurusan Data untuk Pemula Apr 09, 2025 am 12:07 AM

    MySQL sesuai untuk pemula kerana mudah dipasang, kuat dan mudah untuk menguruskan data. 1. Pemasangan dan konfigurasi mudah, sesuai untuk pelbagai sistem operasi. 2. Menyokong operasi asas seperti membuat pangkalan data dan jadual, memasukkan, menanyakan, mengemas kini dan memadam data. 3. Menyediakan fungsi lanjutan seperti menyertai operasi dan subqueries. 4. Prestasi boleh ditingkatkan melalui pengindeksan, pengoptimuman pertanyaan dan pembahagian jadual. 5. Sokongan sokongan, pemulihan dan langkah keselamatan untuk memastikan keselamatan data dan konsistensi.

    Pengoptimuman pertanyaan di MySQL adalah penting untuk meningkatkan prestasi pangkalan data, terutama ketika berurusan dengan set data yang besar Pengoptimuman pertanyaan di MySQL adalah penting untuk meningkatkan prestasi pangkalan data, terutama ketika berurusan dengan set data yang besar Apr 08, 2025 pm 07:12 PM

    1. Gunakan indeks yang betul untuk mempercepatkan pengambilan data dengan mengurangkan jumlah data yang diimbas memilih*frommployeesWherElast_name = 'Smith'; Jika anda melihat lajur jadual beberapa kali, buat indeks untuk lajur tersebut. Jika anda atau aplikasi anda memerlukan data dari pelbagai lajur mengikut kriteria, buat indeks komposit 2. Elakkan pilih * Hanya lajur yang diperlukan, jika anda memilih semua lajur yang tidak diingini, ini hanya akan memakan lebih banyak pelayan dan menyebabkan pelayan melambatkan pada masa yang tinggi atau kekerapan misalnya, jadual anda

    Cara Melihat MySQL Cara Melihat MySQL Apr 08, 2025 pm 07:21 PM

    Lihat pangkalan data MySQL dengan arahan berikut: Sambungkan ke pelayan: MySQL -U Pengguna Nama -P Kata Laluan Run Show pangkalan data; Perintah untuk mendapatkan semua pangkalan data yang sedia ada Pilih pangkalan data: Gunakan nama pangkalan data; Lihat Jadual: Tunjukkan Jadual; Lihat Struktur Jadual: Huraikan nama jadual; Lihat data: pilih * dari nama jadual;

    Bolehkah saya mengambil kata laluan pangkalan data di Navicat? Bolehkah saya mengambil kata laluan pangkalan data di Navicat? Apr 08, 2025 pm 09:51 PM

    Navicat sendiri tidak menyimpan kata laluan pangkalan data, dan hanya boleh mengambil kata laluan yang disulitkan. Penyelesaian: 1. Periksa Pengurus Kata Laluan; 2. Semak fungsi "Ingat Kata Laluan" Navicat; 3. Tetapkan semula kata laluan pangkalan data; 4. Hubungi pentadbir pangkalan data.

    Memahami sifat asid: tiang pangkalan data yang boleh dipercayai Memahami sifat asid: tiang pangkalan data yang boleh dipercayai Apr 08, 2025 pm 06:33 PM

    Penjelasan terperinci mengenai atribut asid asid pangkalan data adalah satu set peraturan untuk memastikan kebolehpercayaan dan konsistensi urus niaga pangkalan data. Mereka menentukan bagaimana sistem pangkalan data mengendalikan urus niaga, dan memastikan integriti dan ketepatan data walaupun dalam hal kemalangan sistem, gangguan kuasa, atau pelbagai pengguna akses serentak. Gambaran keseluruhan atribut asid Atomicity: Transaksi dianggap sebagai unit yang tidak dapat dipisahkan. Mana -mana bahagian gagal, keseluruhan transaksi dilancarkan kembali, dan pangkalan data tidak mengekalkan sebarang perubahan. Sebagai contoh, jika pemindahan bank ditolak dari satu akaun tetapi tidak meningkat kepada yang lain, keseluruhan operasi dibatalkan. Begintransaction; UpdateAcCountSsetBalance = Balance-100Wh

    See all articles