Cara Menggunakan Bidang Data JSON dalam Pangkalan Data MySQL
Feb 08, 2025 am 08:49 AM
Harus diingat bahawa mana -mana pangkalan data boleh menyimpan dokumen JSON sebagai satu gumpalan rentetan tunggal. Walau bagaimanapun, sokongan MySQL dan PostgreSQL menyimpan data JSON yang disahkan sebagai pasangan nilai utama sebenar dan bukannya rentetan mudah.
mata utama
- MySQL 5.7 Pangkalan Data InnoDB dan PostgreSQL 9.2 Secara langsung menyokong jenis dokumen JSON, tetapi harus digunakan dengan berhati -hati kerana batasan pengindeksan langsung.
- JSON adalah yang terbaik untuk menyimpan data jarang, sifat tersuai, hierarki, dan situasi di mana fleksibiliti diperlukan. Ia tidak boleh menggantikan lajur yang dinormalisasi yang sering menanyakan atau data indeks.
- MySQL menyediakan pelbagai fungsi untuk membuat, mengesahkan, mencari dan mengubahsuai objek JSON. Fungsi ini termasuk json_array (), json_object (), json_quote (), json_type (), json_valid (), json_contains (), json_search (), dan json_set () dan json_merge_ untuk mengemas kini dokumen json menggunakan patch notation (), etc. fungsi.
- MySQL 9.1 menyokong pengindeksan fungsi lajur yang dihasilkan yang diperolehi daripada data JSON, yang membolehkan pertanyaan yang cekap dari elemen JSON tertentu.
- Walaupun MySQL menyokong JSON, ia masih merupakan pangkalan data relasi. Berlebihan JSON boleh mengimbangi kelebihan SQL.
menyimpan dokumen JSON dalam lajur MySQL JSON tidak bermakna anda harus melakukan ini
Normalisasi adalah teknologi yang digunakan untuk mengoptimumkan struktur pangkalan data. Peraturan formula biasa (1NF) yang pertama menetapkan bahawa setiap lajur harus memegang satu nilai dan menyimpan dokumen JSON yang bernilai multi-jelas melanggar peraturan ini.Jika data anda mempunyai keperluan data relasi yang jelas, sila gunakan medan nilai tunggal yang sesuai. JSON harus digunakan dengan berhati -hati sebagai usaha terakhir. Bidang nilai JSON tidak boleh diindeks secara langsung, jadi elakkan menggunakannya pada lajur yang sering dikemas kini atau dicari.
Pengindeksan fungsi lajur yang dihasilkan yang diperolehi daripada data JSON membolehkan anda mengindeks bahagian tertentu objek JSON, dengan itu meningkatkan prestasi pertanyaan.
iaitu, JSON mempunyai beberapa kes penggunaan yang baik untuk data jarang atau sifat tersuai.
Buat jadual dengan lajur jenis data JSON
Pertimbangkan kedai menjual buku. Semua buku mempunyai ID, ISBN, tajuk, penerbit, kiraan halaman dan data hubungan yang jelas.Sekarang, jika anda ingin menambah seberapa banyak tag kategori untuk setiap buku. Anda boleh melaksanakannya dalam SQL menggunakan kaedah berikut:
- Jadual tag yang menyimpan setiap nama tag dan ID uniknya; Jadual pemetaan tag yang mengandungi banyak rekod, pemetaan ID buku ke ID Tag.
CREATE TABLE `book` ( `id` MEDIUMINT() UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(200) NOT NULL, `tags` JSON DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB;Lajur MySQL JSON tidak boleh mempunyai nilai lalai, tidak boleh digunakan sebagai kunci utama, tidak boleh digunakan sebagai kunci asing, dan tidak boleh mempunyai indeks langsung.
ALTER TABLE book ADD COLUMN first_tag VARCHAR(50) AS (JSON_UNQUOTE(tags->'$[0]')), ADD INDEX idx_first_tag (first_tag);Tambah data JSON
keseluruhan dokumen JSON boleh diluluskan dalam penyataan memasukkan atau kemas kini, menjadikannya mudah untuk memindahkan JSON ke MySQL untuk penyimpanan dan operasi.
anda juga boleh membuat JSON menggunakan fungsi berikut:
INSERT INTO `book` (`title`, `tags`) VALUES ( 'ECMAScript 2015: A SitePoint Anthology', '["JavaScript", "ES2015", "JSON"]' );
fungsi json_array (), digunakan untuk membuat tatasusunan. Sebagai contoh: - kembali [1, 2, "ABC"]: pilih JSON_ARRAY (1, 2, 'ABC');
- fungsi json_object (), digunakan untuk membuat objek. Sebagai contoh: - kembali {"a": 1, "b": 2}: pilih json_object ('a', 1, 'b', 2);
- fungsi JSON_QUOTE (), digunakan untuk merujuk rentetan sebagai nilai JSON. Sebagai contoh: - kembali "[1, 2," abc "]": pilih json_quote ('[1, 2, "abc"]');
- Cast (AnyValue as JSON) berfungsi untuk menukar nilai ke jenis JSON untuk memastikan kesahihan: pilih cast ('{"a": 1, "b": 2}' sebagai json);
- fungsi json_type () membolehkan anda menyemak jenis nilai JSON. Ia harus mengembalikan objek, array, jenis skalar (integer, boolean, dan lain -lain), null atau kesilapan. Contohnya:
-- 返回ARRAY: SELECT JSON_TYPE('[1, 2, "abc"]'); -- 返回OBJECT: SELECT JSON_TYPE('{"a": 1, "b": 2}'); -- 返回錯(cuò)誤: SELECT JSON_TYPE('{"a": 1, "b": 2');cuba memasukkan dokumen JSON yang tidak sah akan membuang ralat dan keseluruhan rekod tidak akan dimasukkan/dikemas kini.
-- 返回1: SELECT JSON_TYPE('[1, 2, "abc"]'); -- 返回1: SELECT JSON_TYPE('{"a": 1, "b": 2}'); -- 返回0: SELECT JSON_TYPE('{"a": 1, "b": 2');Cari dokumen JSON dalam lajur MySQL JSON
Menggunakan fungsi MySQL JSON seperti fungsi json_contains (), anda boleh menyemak sama ada dokumen JSON mengandungi nilai tertentu. Pulangan 1 Apabila perlawanan dijumpai. Contohnya:
fungsi json_search () mengembalikan laluan ke nilai dalam dokumen JSON. Mengembalikan Null apabila tidak ada perlawanan.
fungsi json_table () menukarkan data JSON ke dalam format relasi untuk memudahkan pertanyaan:
-- 所有帶有“JavaScript”標(biāo)簽的書籍: SELECT * FROM `book` WHERE JSON_CONTAINS(tags, '["JavaScript"]');
json path
-- 所有標(biāo)簽以“Java”開頭的書籍: SELECT * FROM `book` WHERE JSON_SEARCH(tags, 'one', 'Java%') IS NOT NULL;
pertanyaan MySQL JSON menggunakan fungsi JSON_EXTRACT () boleh mendapatkan nilai tertentu dari dokumen JSON berdasarkan laluan yang ditentukan.
CREATE TABLE `book` ( `id` MEDIUMINT() UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(200) NOT NULL, `tags` JSON DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB;
semua definisi jalan bermula dengan $ diikuti oleh pemilih lain:
- Tempoh diikuti dengan nama, seperti $ .website
- [n], di mana n ialah kedudukan dalam array indeks sifar
- . [*] Semua ahli Objek Penilaian Wildcard
- [*] Array Penilaian Wildcard Semua Ahli
- awalan ** Suffix Wildcard menilai semua laluan yang bermula dengan awalan bernama dan berakhir dengan akhiran bernama
Contoh berikut merujuk kepada dokumen JSON berikut:
ALTER TABLE book ADD COLUMN first_tag VARCHAR(50) AS (JSON_UNQUOTE(tags->'$[0]')), ADD INDEX idx_first_tag (first_tag);
Contoh Path:
- $. Pulangan 1
- $. C kembali [3, 4]
- $. C [1] kembali 4
- $. D.E kembali 5
- $ **. E kembali [5]
anda boleh menggunakan JSON untuk mengekstrak fungsi MySQL untuk mengekstrak nama dan tag pertama dari jadual buku anda:
INSERT INTO `book` (`title`, `tags`) VALUES ( 'ECMAScript 2015: A SitePoint Anthology', '["JavaScript", "ES2015", "JSON"]' );
Untuk contoh yang lebih kompleks, katakan anda mempunyai jadual pengguna yang mengandungi data fail konfigurasi JSON. Contohnya:
anda boleh menggunakan laluan JSON untuk mengekstrak nama Twitter. Contohnya:
CREATE TABLE `book` ( `id` MEDIUMINT() UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(200) NOT NULL, `tags` JSON DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB;anda boleh menggunakan laluan JSON dalam klausa WHERE untuk mengembalikan hanya pengguna dengan akaun Twitter:
ALTER TABLE book ADD COLUMN first_tag VARCHAR(50) AS (JSON_UNQUOTE(tags->'$[0]')), ADD INDEX idx_first_tag (first_tag);
Ubah suai sebahagian daripada dokumen JSON
Terdapat beberapa fungsi MySQL yang boleh mengubahsuai sebahagian daripada dokumen JSON menggunakan notasi laluan. Fungsi ini termasuk:
json_set (doc, path, val [, path, val] ...): masukkan atau kemas kini data dalam dokumen. Kemas kini buku set tags = json_set (tags, '$ [0]', 'tag dikemas kini');
- json_insert (doc, path, val [, path, val] ...): masukkan data ke dalam dokumen tanpa menimpa nilai sedia ada. Kemas kini buku set tags = json_insert (tags, '$ [0]', 'tag baru');
- json_replace (doc, path, val [, path, val] ...): gantikan data dalam dokumen. Kemas kini buku set tags = json_replace (tags, '$ [0]', 'diganti tag');
- json_merge_patch (doc, doc [, doc] ...): Gabungkan dua atau lebih dokumen JSON dan gantikan kunci sedia ada dengan nilai -nilai dokumen berikutnya. Kemas kini buku set tags = json_merge_patch (tags, '["technical"]') di mana json_search (tags, 'one', 'javascript') tidak null;
- json_array_append (Doc, Path, Val [, Path, Val] ...): Masukkan nilai ke akhir array. Kemas kini buku set tags = json_array_append (tags, '$', 'tag baru');
- json_array_insert (doc, path, val [, path, val] ...): masukkan nilai di lokasi tertentu dalam array JSON. Kemas kini buku set tags = json_array_insert (tags, '$ [0]', 'tag dimasukkan');
- json_remove (doc, path [, path] ...): Padam data dari dokumen. Kemas kini buku set tags = json_remove (tags, '$ [1]');
- json_pretty (val): Mencantikkan dokumen JSON untuk memudahkan mereka dibaca. Pilih json_pretty ('{"name": "sitepoint", "tags": ["mysql", "json"]}');
- Contohnya, jika anda ingin menambah tag "Teknikal" ke mana -mana buku yang sudah mempunyai tag "JavaScript", anda boleh menggunakan fungsi JSON_MERGE_PATCH ():
Maklumat lanjut
INSERT INTO `book` (`title`, `tags`) VALUES ( 'ECMAScript 2015: A SitePoint Anthology', '["JavaScript", "ES2015", "JSON"]' );
Dokumentasi MySQL menyediakan maklumat terperinci mengenai jenis data MySQL JSON dan fungsi JSON yang berkaitan.
ingatkan sekali lagi, jangan gunakan JSON melainkan benar -benar perlu. Anda boleh mensimulasikan keseluruhan pangkalan data NoSQL yang berorientasikan dokumen di MySQL, tetapi ini akan mengimbangi banyak manfaat SQL, dan anda juga boleh beralih terus ke sistem NoSQL yang sebenar!iaitu, untuk keperluan data yang lebih samar dalam aplikasi SQL, jenis data JSON boleh menjimatkan beberapa usaha.
soalan yang sering ditanya mengenai penggunaan data JSON dalam mysql
Bolehkah anda menggunakan JSON di MySQL?
MySQL menyokong JSON dengan menyediakan jenis data JSON, yang digunakan untuk menyimpan data dalam format JSON dalam lajur. Bermula dengan MySQL 5.7.8, anda boleh membuat jadual dengan lajur JSON, yang membolehkan anda memasukkan, mengemas kini, dan memohon data JSON menggunakan SQL. MySQL menyediakan satu siri fungsi JSON untuk memproses data JSON dalam lajur ini, supaya data JSON dapat diekstrak, diubahsuai, dan dimanipulasi.
Di samping itu, anda boleh menggunakan data JSON dalam pertanyaan SQL dan mengubahnya menjadi data relasi menggunakan fungsi seperti JSON_TABLE apabila diperlukan. Walau bagaimanapun, adalah penting untuk memahami bahawa MySQL pada asasnya merupakan pangkalan data relasi dengan sokongan jenis data JSON yang direka untuk memudahkan pemprosesan data JSON dalam konteks hubungan dan bukannya menjadi pangkalan data NoSQL JSON sepenuhnya.
Seperti yang disebutkan di atas, hanya kerana anda boleh menyimpan JSON tidak bermakna anda harus melakukan ini: Normalisasi adalah teknik untuk mengoptimumkan struktur pangkalan data. Peraturan Formula Normal (1NF) yang pertama menyatakan bahawa setiap lajur harus memegang satu nilai dan menyimpan dokumen JSON multi-bernilai melanggar peraturan ini.
Adakah ok untuk menyimpan JSON di MySQL?
menyimpan json di mysql adalah ok jika:
- data separa berstruktur atau dinamik, tidak sesuai untuk corak yang ketat.
- sifat tersuai, di mana reka bentuk hubungan tidak cekap.
- Bersepadu dengan API JSON untuk menyimpan muatan atau log.
Bagaimana menggunakan JSON dalam pertanyaan MySQL?
Anda boleh menggunakan JSON dalam pertanyaan MySQL dengan menggunakan fungsi JSON MySQL. Fungsi ini membolehkan anda mengekstrak, memanipulasi, dan menanyakan data JSON yang disimpan dalam rentetan format JSON dalam lajur JSON atau pangkalan data. Untuk mengakses data JSON dalam lajur JSON, gunakan -& gt;json_extract, json_set, dan json_objectagg dan fungsi JSON lain membolehkan anda menapis, mengubahsuai, agregat dan memproses data JSON. Anda juga boleh menggunakan klausa WHERE untuk menapis baris berdasarkan nilai JSON. Fungsi JSON MySQL menyediakan cara yang fleksibel untuk berinteraksi dan memanipulasi objek JSON secara langsung dalam pertanyaan pangkalan data.
Bilakah saya harus menggunakan JSON di MySQL?
anda harus menggunakan JSON dalam MySQL di bawah keadaan berikut:
- Data separa berstruktur: Gunakan JSON semasa mengendalikan medan yang tidak dapat diramalkan atau jarang seperti sifat tersuai.
- Mod Dinamik: JSON menyediakan fleksibiliti apabila keperluan data berubah dengan kerap.
- Data hidraft atau bersarang: JSON menyokong data dengan hubungan ibu bapa atau anak.
- Integrasi API: Simpan muatan, respons, atau log sebagai dokumen JSON.
- Bidang yang sering ditanya yang memerlukan pengindeksan (pengindeksan fungsi dapat membantu, tetapi reka bentuk hubungan biasanya lebih cepat).
- Data hubungan ketat yang diseragamkan diperlukan.
- Pertanyaan kompleks di laluan JSON dapat merendahkan prestasi.
Bagaimana untuk menyimpan data JSON di MySQL?
Untuk menyimpan data JSON di MySQL, anda mempunyai dua pilihan utama. Pertama, anda boleh menggunakan jenis data JSON yang diperkenalkan di MySQL untuk membuat jadual dengan lajur JSON. Kaedah ini menyediakan penyimpanan berstruktur dan prestasi pertanyaan yang lebih baik untuk data JSON.Sebagai alternatif, anda boleh menyimpan data JSON sebagai teks dalam varchar biasa atau lajur teks. Kaedah ini terpakai apabila perlu menyimpan dan mengambil data JSON tanpa operasi pangkalan data yang kompleks.
Bagaimana untuk mengindeks data JSON dalam MySQL?
Walaupun anda tidak dapat mengindeks lajur JSON secara langsung, MySQL membolehkan anda membuat indeks fungsi pada lajur yang dihasilkan yang diperolehi dari nilai JSON.
Sebagai contoh, untuk mengindeks elemen pertama pelbagai JSON:
CREATE TABLE `book` ( `id` MEDIUMINT() UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(200) NOT NULL, `tags` JSON DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB;
Kaedah ini meningkatkan prestasi pertanyaan untuk laluan JSON yang sering diakses.
Untuk data JSON, adakah anda menggunakan pangkalan data MySQL atau NoSQL?
ia bergantung pada keperluan projek anda:
- Jika anda memerlukan penyimpanan hubungan, kadang-kadang memproses data separa berstruktur, sifat tersuai, atau data hierarki dalam model hubungan, pilih MySQL.
- Jika projek anda melibatkan banyak penyimpanan JSON, skema fleksibel dan operasi berasaskan dokumen sebagai kes penggunaan utamanya, pilih pangkalan data NoSQL (seperti MongoDB).
Sokongan JSON MySQL sangat sesuai untuk beban kerja hibrid, tetapi ia bukan pengganti lengkap untuk pangkalan data NoSQL khusus untuk penyimpanan dokumen.
Bagaimana untuk mengekstrak nilai -nilai tertentu dari medan mysql json?
Untuk mengekstrak nilai khusus dari medan MySQL JSON, gunakan fungsi JSON_EXTRACT () atau singkatan -& gt;
ALTER TABLE book ADD COLUMN first_tag VARCHAR(50) AS (JSON_UNQUOTE(tags->'$[0]')), ADD INDEX idx_first_tag (first_tag);
Bagaimana untuk menanyakan dan menapis data dalam medan MySQL JSON?
Untuk menanyakan dan menapis data yang disimpan dalam medan MySQL JSON, anda boleh menggunakan fungsi seperti json_contains () dan json_search (). Anda juga boleh menggunakan json_extract () untuk mendapatkan nilai tertentu untuk penapisan selanjutnya.
INSERT INTO `book` (`title`, `tags`) VALUES ( 'ECMAScript 2015: A SitePoint Anthology', '["JavaScript", "ES2015", "JSON"]' );
Atas ialah kandungan terperinci Cara Menggunakan Bidang Data JSON dalam Pangkalan Data MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Kebimbangan utama dengan teknologi besar yang bereksperimen dengan kecerdasan buatan (AI) bukanlah ia mungkin menguasai kemanusiaan. Isu sebenar terletak pada ketidaktepatan model bahasa besar (LLMS) yang berterusan seperti chatgpt AI, Gemini Google, dan

Kecerdasan buatan yang lebih maju (AI) menjadi, semakin cenderung "halusinasi" dan memberikan maklumat palsu atau tidak tepat. Menurut penyelidikan oleh Openai, model penalaran yang paling baru dan berkuasa-O3 dan O4-mini-Exhibited H

Agensi Jenayah Kebangsaan UK (NCA) telah menahan empat individu yang disyaki terlibat dalam serangan siber yang menyasarkan Marks dan Spencer (M & S), Co-op, dan Harrods.

Model penalaran kecerdasan buatan (AI) tidak begitu mampu seperti yang muncul. Pada hakikatnya, prestasi mereka rosak sepenuhnya apabila tugas menjadi terlalu rumit, menurut penyelidik di Apple. Model -model yang rumit seperti Claude Anthropic, terbuka

Kriptografi pasca kuantiti telah menjadi keutamaan bagi pemimpin keselamatan siber, namun penyelidikan baru-baru ini menunjukkan bahawa sesetengah organisasi tidak merawat ancaman dengan keseriusan yang diperlukan. Komputer Quantum akhirnya dapat menyelesaikan t

Serangan ransomware membawa mereka kos pemulihan purata sebanyak $ 4.5 juta, menurut satu tinjauan baru -baru ini, yang juga mendapati sejumlah besar perniagaan telah terjejas oleh malware pada tahun lalu.

Red Hat telah memperkenalkan platform layan diri baru yang direka untuk memberikan akses yang lebih mudah kepada program pemajunya. Inisiatif Linux Red Hat Enterprise untuk Pemaju Perniagaan bertujuan untuk membantu pasukan pembangunan dalam membina, menguji, dan menggunakannya

Melabur dalam laman web baru atau platform digital adalah penting untuk sebarang perniagaan. Sama ada anda melancarkan permulaan, membina semula tapak warisan, atau memperluaskan jangkauan anda dengan kedai e -dagang baru, pasukan yang anda pilih untuk membawa visi anda ke kehidupan boleh membuat atau
