- 1 1. Sissejuhatus
- 2 2. Massiivide haldamise põhitõed MySQL-i JSON-tüübi abil
- 3 3. JSON-massiivide põhitegevused
- 4 4. JSON-massiivide otsimine ja filtreerimine
- 5 5. Praktilised kasutusjuhtud: õpe tegelike stsenaariumitega JSON-massiivide kohta
- 6 6. Hoiatused JSON tüübi kasutamisel
- 7 7. Kõige sagedamini esitatud küsimused array‑stiilis andmete kasutamisest MySQL-is
- 8 8. Kokkuvõte
1. Sissejuhatus
MySQL-is massiivi-muundatud andmete haldamise vajadus
Andmebaasides salvestatakse andmed tavaliselt relatsiooniliseks kujunduseks. Kuid rakenduse nõudmiste põhjal võib olla kasulik salvestada mitut väärtust ühte veergu. Sellisel juhul aitab andmestruktuur nagu “massiiv”.
- Salvestada kasutaja valitud mitu märksõna.
- Salvestada mitu pildi URL-i toote jaoks.
- Koguda ajalugu või logisid ühte välja.
JSON-tüübi kasutamise eelised
MySQL ei paku otsest “massiiiv-tüüpi”, kuid JSON-tüübi kasutades saab hallata massiiv-muundatud andmeid. JSON-tüüp on väga paindlik ja pakub järgmisi eeliseid:
- Toetab sisseehitatud andmestruktuure.
- Luba andmete manipuleerimist otse päringutes.
- Halda mitmeid andmeformaatid ühes väljas.
Selles artiklis tutvustame, kuidas tõhusalt hallata massiiv-muundatud andmeid MySQL-is kasutades JSON-tüüpi.
2. Massiivide haldamise põhitõed MySQL-i JSON-tüübi abil
Mis on JSON-tüüp?
JSON (JavaScript Object Notation) on kerge ja lihtne andmevahetusvorming. MySQL toetab 5.7 versioonist lähtudes põhi JSON-tüüpi, mis võimaldab JSON-vormingus andmeid otse andmebaasis salvestada ja töödelda.
Näide: järgnevad andmed on salvestatavad JSON-tüübi väli:
{
"tags": ["PHP", "MySQL", "JSON"],
"status": "published"
}
JSON-tüübi eelised ja kasutusjuhtumid
Peamised eelised JSON-tüübi kasutamisel:
- Paindlik andmestruktuur : Saate käsitleda muutuja pikkusega andmeid, ilma et peaksite relatsioonilist skeemi muutma.
- Tõhusandmete manipulatsioon : Kasutage MySQL-i sisseehitatud funktsioone (nt
JSON_EXTRACT,JSON_ARRAY) andmete hõlpsaks manipuleerimiseks. - Skeemivaba disain võimalik : Te ei pea skeemi sagedamini muutma, sest rakenduse spetsiifikad muutuvad.
Kasutusjuhtumid:
- Määrata tooteinfole mitu kategooriat.
- Salvestada kohandatud kasutaja seaded.
- Kasutada veebirakendustes sisseehitatud JSON-andmete töötlemisel.
3. JSON-massiivide põhitegevused
JSON-massiivide loomine
MySQL-is võite kasutada JSON_ARRAY funktsiooni, et hõlpsasti luua JSON-vormingus massiive. Massiivid on kasulikud, kui soovite salvestada mitu väärtust ühe veeru sisse.
Näide kasutamisest
Järgmises päringus loome JSON-massiivi nimega tags.
SELECT JSON_ARRAY('PHP', 'MySQL', 'JavaScript') AS tags;
Tulemus:
["PHP", "MySQL", "JavaScript"]
Rakendatud näide
Siin on näide JSON-massiivi andmebaasi salvestamisest INSERT avaldise kaudu.
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
tags JSON
);
INSERT INTO articles (tags)
VALUES (JSON_ARRAY('PHP', 'MySQL', 'JavaScript'));
Andmete tõmbamine JSON-massiividest
JSON-massiivist salvestatud andmete hankimiseks kasutate JSON_EXTRACT funktsiooni. See võimaldab välja võtta spetsiifilisi elemente massiivist.
Näide kasutamisest
Järgmises näites tõmbame massiivi teist elementi (0-põhine indeks).
SELECT JSON_EXTRACT('["PHP", "MySQL", "JavaScript"]', '$[1]') AS second_tag;
Tulemus:
"MySQL"
Tõmba mitu elementi
Saate ka mitme elemendi korraga saada.
SELECT JSON_EXTRACT('["PHP", "MySQL", "JavaScript"]', '$[0]', '$[2]') AS extracted_values;
Lisa, uuenda ja kustuta andmeid
Andmete lisamine massiivi
JSON_ARRAY_APPEND funktsiooni kasutades saate lisada uue andme olemasolevale massiivile.
SET @tags = '["PHP", "MySQL"]';
SELECT JSON_ARRAY_APPEND(@tags, '$', 'JavaScript') AS updated_tags;
Tulemus:
["PHP", "MySQL", "JavaScript"]
Andmete uuendamine massiivis
Saate konkreetse elemendi massiivis uuendada kasutades JSON_SET.
SET @tags = '["PHP", "MySQL", "JavaScript"]';
SELECT JSON_SET(@tags, '$[1]', 'Python') AS updated_tags;
Tulemus:
["PHP", "Python", "JavaScript"]
Andmete eemaldamine massiivist
Kasutage JSON_REMOVE, et kustutada konkreetne element massiivis.
SET @tags = '["PHP", "MySQL", "JavaScript"]';
SELECT JSON_REMOVE(@tags, '$[1]') AS updated_tags;
Tulemus:
["PHP", "JavaScript"]
4. JSON-massiivide otsimine ja filtreerimine
Otsing massiividest, mis sisaldavad konkreetseid andmeid
Et teha kindlaks, kas JSON-massiiv sisaldab konkreetset väärtust, kasutate JSON_CONTAINS funktsiooni. See funktsioon tagastab, kas määratud JSON-massiiv sisaldab antud väärtust.
Näidis kasutus
Järgmisel näites kontrollime, kas JSON-massiiv sisaldab „MySQL”.
SELECT JSON_CONTAINS('["PHP", "MySQL", "JavaScript"]', '"MySQL"') AS is_present;
Tulemus:
1 (if present)
0 (if not present)
Rakendatud näide: tingimuslik otsing
Kui soovite pärida andmebaasist ridu, mis sisaldavad JSON-massiivi koos konkreetse väärtusega, võite kasutada JSON_CONTAINS funktsiooni WHERE klause sees.
SELECT *
FROM articles
WHERE JSON_CONTAINS(tags, '"MySQL"');
See päring tõmbab ridu, kus veerg tags sisaldab „MySQL”.
Massiivi pikkuse leidmine
JSON-massiivi elementide arvu saamiseks kasutage JSON_LENGTH funktsiooni. See on kasulik andmete analüüsi või tingimusliku filtriga.
Näidis kasutus
Järgnevas näites saame massiivi elementide arvu.
SELECT JSON_LENGTH('["PHP", "MySQL", "JavaScript"]') AS array_length;
Tulemus:
3
Praktiline näide: ridade välja tõmbamine, mis vastavad tingimusele
Et tõmmata ridu, kus elementide arv on võrdne või suurem kui teatud väärtus, kasutage JSON_LENGTH funktsiooni WHERE klause sees.
SELECT *
FROM articles
WHERE JSON_LENGTH(tags) >= 2;
See päring valib read, kus veerg tags sisaldab kaks või rohkem elementi.
Praktiline näide tingimuslike päringutega
Saate kombineerida mitu tingimust keerukamate otsingute jaoks. Järgnevas päringus leitakse read, kus tags massiiv sisaldab „JavaScript” ja millel on kolm või rohkem elementi.
SELECT *
FROM articles
WHERE JSON_CONTAINS(tags, '"JavaScript"')
AND JSON_LENGTH(tags) >= 3;
5. Praktilised kasutusjuhtud: õpe tegelike stsenaariumitega JSON-massiivide kohta
Kuidas salvestada toodete kategooriaid JSON-massiivina
E-kaubanduse saitidel võivad tooted kuuluda mitmesse kategooriasse. Sellistes olukordades võib kategooriaandmete salvestamiseks JSON-massiivi kasutamine olla tõhus.
Näidis: kategooriaandmete salvestamine toodetele
Allpool on näide tabeli loomisel, millel on JSON veerg nimega categories ja kus salvestatakse mitu kategooriat.
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
categories JSON
);
INSERT INTO products (name, categories)
VALUES ('Laptop', JSON_ARRAY('Electronics', 'Computers')),
('Smartphone', JSON_ARRAY('Electronics', 'Mobile Devices'));
See andmestruktuur võimaldab lühikese salvestamise ka siis, kui toode kuulub mitmesse kategooriasse.
Päring tooteid, mis kuuluvad konkreetse kategooriasse
Kasutades JSON tüüpi, saate hõlpsasti otsida tooteid, mis kuuluvad konkreetsetesse kategooriatesse.
Päringu näide
Järgnevas päringus leitakse kõik tooted kategoorias „Elektronikad”.
SELECT name
FROM products
WHERE JSON_CONTAINS(categories, '"Electronics"');
Tulemus:
Laptop
Smartphone
See päring võimaldab paindlikult saada toodete loendeid kategooria järgi.
Näidis: filtreerimine hindade vahemiku järgi
Vaatame, kuidas salvestada hinnatõmmist JSON-is ja pärida tooteid vastavalt hindade vahemikule.
Andme näidis
Allpool salvestame toote hindade teavet üksiku kauba kohta, kasutades JSON tüüpi.
CREATE TABLE products_with_prices (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
details JSON
);
INSERT INTO products_with_prices (name, details)
VALUES ('Laptop', '{"price": 150000, "categories": ["Electronics", "Computers"]}'),
('Smartphone', '{"price": 80000, "categories": ["Electronics", "Mobile Devices"]}');
Päringu näide
To otsida tooteid, mille hind on 100 000 või rohkem, kasutate JSON_EXTRACT.
Tulemus:
SELECT name
FROM products_with_prices
WHERE JSON_EXTRACT(details, '$.price') >= 100000;
Tulemus:
Laptop
JSON_TABLEi kasutamine laiendamiseks ja päringute näidiste jaoks
Näidis kasutus
Allpool on näidis, kus JSON massiiv laieneb ja iga kategooria kuvatakse eraldi read.
SELECT *
FROM JSON_TABLE(
'["Electronics", "Computers", "Mobile Devices"]',
'$[*]' COLUMNS(
category_name VARCHAR(100) PATH '$'
)
) AS categories_table;
Tulemus:
category_name
--------------
Electronics
Computers
Mobile Devices

6. Hoiatused JSON tüübi kasutamisel
Jõudluse optimeerimise punktid
Kuigi JSON tüüp on väga paindlik, võib ilma korraliku disainita andmebaasi jõudlust negatiivselt mõjutada. Allpool on peamised jõudluse optimeerimise punktid.
1. Indeksite kasutamine
MySQLis ei saa otse indeksi JSON veergu määrata, kuid saate luua virtuaalse veeru ja indekseerida kindlat võtit.
Näidis: indeksi loomine virtuaalse veeru kaudu
Selles näites indetseerime price võtme JSON-andmetes.
ALTER TABLE products_with_prices
ADD COLUMN price INT AS (JSON_EXTRACT(details, '$.price')) STORED,
ADD INDEX idx_price (price);
Virtuaalse veeru kasutamisega saate oluliselt parandada JSON‑tüübi andmete otsingu jõudlust.
2. Vältige liiga keerulisi JSON struktuure
Sügavalt omavahel seotud JSON‑struktuurid mõjutavad päringute loetavust ja jõudlust. Andmete kavandamisel valige võimalikult lihtne JSON‑struktuur.
Hea näide:
{
"categories": ["Electronics", "Computers"],
"price": 150000
}
Struktuur, mida vältida:
{
"product": {
"details": {
"price": 150000,
"categories": ["Electronics", "Computers"]
}
}
}
Kuidas indeksit tõhusalt kasutada
Virtuaalse veeru kasutamisel indeksi loomiseks tuleb arvestada järgmiste punktidega:
- Virtuaalne veerg peab olema
STORED. - Kasutage
JSON_EXTRACT‑i, et eraldada konkreetseid võtmeid virtuaalse veergu.
Näiteks, et eraldada categories võtme väärtus ja selle indekseerida:
ALTER TABLE products
ADD COLUMN main_category VARCHAR(255) AS (JSON_EXTRACT(categories, '$[0]')) STORED,
ADD INDEX idx_main_category (main_category);
Andmete valideerimise tähtsus
Kuigi JSON‑tüüp on paindlik, riskeerib ka vale vormingu salvestamist. Andmete terviklikkuse säilitamiseks kasutage järgmisi lähenemisi.
1. Kasutage CHECK piiranguid
Alates MySQL 8.0‑st võite kasutada CHECK piiranguid JSON‑andmete struktuuri või sisu valideerimiseks.
ALTER TABLE products_with_prices
ADD CONSTRAINT check_price CHECK (JSON_EXTRACT(details, '$.price') >= 0);
2. Valideerimine rakenduse tasandil
Andmete lisamisel tuleks JSON‑vormingut rakenduse tasandil valideerida. Programmeerimiskeeltes nagu PHP või Python saate kasutada standardraamatukogusid JSON‑i valideerimiseks.
7. Kõige sagedamini esitatud küsimused array‑stiilis andmete kasutamisest MySQL-is
K1: Kas MySQL pakub massiivi tüüpi?
A1: MySQLil pole otsest „massiivi tüüpi“. Küll aga saate massiivi stiilis andmeid hallata JSON‑tüübi kasutades. JSON‑tüübi abil saate salvestada mitu väärtust ühte veergu ja manipuleerida nende kaudu päringuid.
Näide:
SELECT JSON_ARRAY('value1', 'value2', 'value3') AS example_array;
Tulemus:
["value1", "value2", "value3"]
K2: Kas saate JSON‑tüüpi andmetele indeksi määrata?
A2: Ei saa JSON‑tüüpi andmetele otse indeksi määrata. Küll aga saate eraldada konkreetseid võtmeid või väärtusi virtuaalse veeru ja seejärel seada indeks selle veeru peale.
Näide:
ALTER TABLE products_with_prices
ADD COLUMN price INT AS (JSON_EXTRACT(details, '$.price')) STORED,
ADD INDEX idx_price (price);
See võimaldab tõhusat otsingut JSON‑andmete sisemiste väärtuste jaoks.
Q3: Kas JSON andmete jaoks on suuruse piir?
A3: MySQL‑i JSON‑tüüp saab taluda kuni 4 GB andmeid. Kuid väga suurte JSON‑andmete kasutamine võib jõudlust halvendada, seega on õige andmeprojekt oluline.
Soovitused
- Säilita ainult minimaalne vajalik andme.
- Vältida sügavalt sisaratud JSON‑struktuure.
Q4: Kuidas uuendada konkreetset elementi JSON‑massiivis?
A4: Saad konkreetseid elemente JSON‑massiivi sees uuendada funktsiooniga JSON_SET.
Example:
SET @tags = '["PHP", "MySQL", "JavaScript"]';
SELECT JSON_SET(@tags, '$[1]', 'Python') AS updated_tags;
Result:
["PHP", "Python", "JavaScript"]
Q5: Võrdlus JSON‑tüübi ja traditsioonilise tabeli disaini vahel
A5: JSON‑tüüp pakub kõrget paindlikkust, kuid erineb ka loomupärasest suheloomist.
| Item | JSON type | Traditsiooniline tabelidisain |
|---|---|---|
| Paindlikkus | Kõrge (andmebaasi skeemi muudatusi ei nõuta) | Parandatud (skeemi muutmine vajalik) |
| Jõudlus | Alahinnatud mõnedes toimingutes | Optimeeritud |
| Päringu keerukus | JSON-funktsioonid on nõutavad | Simple |
| Indeksimine | Osaliselt toetatud virtuaalsete veergudega | Täiesti toetatud |
8. Kokkuvõte
JSON‑tüübi kasutamise eelised massiivi‑seda tüüpi andmete töötlemisel MySQL‑is
Selles artiklissa käsitletakse JSON‑tüüpi kasutamist massiivi‑seda tüüpi andmete töötlemiseks MySQL‑is. Peamised punktid on järgmised:
Miks kasutada JSON‑tüüpi
MySQL‑il puudub otsene massiivi tüüp, kuid JSON‑tüübi kasutades saad salvestada mitmeid väärtusi ühte veergu ja teha paindlikke andmeoperatsioone.Põhilised JSON‑operatsioonid
* Õppisid, kuidas luua JSON‑massive, andmeid ekstraktida, väärtusi uuendada ja kustutada.
* Kasutasid funktsioone naguJSON_ARRAY,JSON_EXTRACTjaJSON_SET, et tõhusalt manipuleerida massiivi‑seda tüüpi andmeid.Otsing ja filtreerimine
* KasutasidJSON_CONTAINS, et otsida konkreetseid väärtusi JSON‑massivides.
* KasutasidJSON_LENGTH, et saada massiivi pikkus ja teha tingimuslikku filtreerimist.Praktilised kasutusjuhtud
Saad teada konkreetseid rakendusjuhtumeid, näiteks toote kategooriate haldamist ja hindade järgi filtreerimist.Hoiatused ja optimeerimine
* Arutati JSON‑andmete indekseerimist virtuaalveergude kaudu ja JSON‑andmete valideerimise tähtsust.
Järgmised sammud JSON‑tüübi kasutamiseks
JSON‑tüübi kasutamisel MySQL‑is saad võimaldada paindlikumat andmehalduse kui traditsiooniline relatsiooniline andmebaasi disain. Kuid sobiv disain ja jõudluse kaalutlused on hädavajalikud.
Järgmised õppe teemad
- Komposiit‑indekside kasutamine
Indeksite kavandamine, mis ühendavad JSON‑tüüpi veerge ja tavalisi veerge. - Täpsemad JSON‑funktsioonid
KasutadesJSON_MERGE,JSON_OBJECTja muid funktsioone keerukamate operatsioonide jaoks. - Rakendustaseme andmete manipuleerimine
MySQL JSON‑andmete tõhus manipuleerimine PHP‑i või Pythoni kaudu.
Lõplik kokkuvõte
Selle artikliga oled õppinud, kuidas tõhusalt käsitleda massiivi‑seda tüüpi andmeid JSON‑tüübi abil MySQL‑is. Rakendades seda teadmist, saad disainida paindlikumaid ja skaleeritavamaid andmebaasijärjestusi.


