Cum se utilizează datele json în bazele de date MySQL - php academia blog

PostgreSQL a sprijinit JSON la versiunea 9.1 și orice bază de băi va accepta documentul JSON ca pe o singură linie. Cu toate acestea, MySQL și PostgreSQL suportă în totalitate datele scanate în format JSON, sub formă de perechi cheie / valoare, mai degrabă decât ca o singură linie.







Doar pentru că puteți salva JSON.

... nu înseamnă că merită

Normalizarea este o metodă utilizată pentru optimizarea bazelor de date. Regulă a primei forme normale (1NF) afirmă că fiecare coloană trebuie să conțină o valoare, este încălcată în JSON prin stocarea valorilor multivate.

Dacă aveți cerințe clare privind datele relaționale, utilizați valorile individuale în consecință. JSON trebuie folosit cu prudență ca ultimă soluție. Valorile câmpurilor JSON nu pot fi indexate, pentru a evita utilizarea coloanelor care sunt întotdeauna actualizate sau căutate în mod regulat. În plus, mai puține aplicații client acceptă JSON, iar tehnologia este actualizată și devine mai puțin stabilă, comparativ cu alte tipuri.

Ei spun că o versiune bună a aplicației JSON va fi cantități mici de date sau atribute personalizate.

Crearea unui tabel cu date JSON

1 - etichetă tabelă. care stochează fiecare nume de etichetă pe un ID unic și
2 - tagmap de tabelă în care sunt multe cărți de identificare pentru ID-uri pentru eticheta de identificare.

Toate acestea vor funcționa, dar mai greoaie, având în vedere simplitatea sarcinii. Prin urmare, definim câmpul tag-uri JSON în tabelul de cărți din MySQL:

CREATE TABLE `book` (
"id" mediu (8) nesemnificat NOT NULL AUTO_INCREMENT,
`title` varchar (200) NU NULL,
`tags` json DEFAULT NULL,
TASTĂ PRIMARĂ (`id`)
) MOTOR

Rețineți că în coloanele JSON nu pot fi valori implicite, chei primare, nu pot fi accesate de chei străine și nu au un index. Puteți crea indexuri secundare în coloana virtuală generată, dar este probabil mai ușor să stocați valoarea indexului într-un câmp separat.

Adăugarea datelor în JSON

Întregul document JSON poate fi trecut prin instrucțiunile INSERT sau UPDATE. De exemplu, etichetele cărții noastre pot fi transmise printr-o matrice:

JSON poate fi, de asemenea, creat folosind:

Funcțiile JSON_ARRAY (). care creează, de exemplu, rețele
-- returnează [1, 2, "abc"]:
SELECTAREA JSON_ARRAY (1, 2, 'abc');

Funcția JSON_OBJECT () care creează obiecte
-- se întoarce:
SELECTAȚI JSON_OBJECT ('a', 1, 'b', 2);

Funcționează JSON_MERGE () pentru a îmbina documentele, de exemplu
-- returnează ["a", 1,]:
SELECT JSON_MERGE ("[" a ", 1] ',' ');







puteți personaliza orice valoare cum ar fi JSON
(CAST anyValue AS JSON)

Funcția JSON_TYPE () vă permite să verificați tipurile de valori JSON. Aceasta returnează OBJECT, ARRAY sau eroare, de exemplu:
-- returnează ARRAY:
SELECTĂ JSON_TYPE ('[1, 2,' abc ']');
-- returnează OBIECTUL:
SELECTĂ JSON_TYPE ('');
-- returnează o eroare:
SELECT JSON_TYPE ('

În mod similar, funcția JSON_VALID () returnează 1 dacă JSON este corect:
-- returneaza 1:
SELECTĂ JSON_TYPE ('[1, 2,' abc ']');
-- returneaza 1:
SELECTĂ JSON_TYPE ('');
-- returneaza 0:
SELECT JSON_TYPE ("Încercarea de a transmite un JSON incorect la document va cauza o eroare și întreaga înregistrare nu va fi inserată / actualizată.

Căutare JSON de date

În mod similar, funcția JSON_SEARCH () returnează calea spre potrivirea găsită sau NULL dacă nu se găsesc potriviri. Se trece la documentul JSON, în care se face căutarea, "una" pentru a găsi primul meci, "toate" pentru a găsi toate potrivirile și șirurile de căutare, de exemplu:
-- toate cărțile cu etichete care încep cu 'Java':
SELECT * FROM `cartea '
WHERE JSON_SEARCH (etichete, 'unul', 'Java%') NU ESTE NULL;

O cale în format JSON indică o valoare și poate fi utilizată pentru extragerea sau modificarea porțiunilor unui document. Funcția JSON_EXTRACT () arată clar această extragere a uneia sau mai multor valori.
-- returnează "SitePoint":
SELECT JSON_EXTRACT (
„“
"$ .website"
);

Toate definițiile traseului din JSON încep cu $ urmând celălalt selector.

  • punctul urmat de nume, de exemplu, $ .website
  • [N] unde N este poziția în matrice unde indexarea este de la zero
  • a. [*] Wildcard, care determină numărul de membri în obiect
  • a [*] Wildcard care definește toți membrii din matrice
  • prefixul * suffix Wildcard, care definește toate căile care încep cu un anumit sufix și se termină cu un anumit prefix.

Având în vedere acest document JSON:

  • $ .a revine 1
  • $ .c returnează [3, 4]
  • $ .c [1] returnează 4
  • $ .d.e returnează 5
  • $ ** e întoarce [5]

Alocarea căii JSON în interogare

Putem extrage prima etichetă a cărții noastre de tabel folosind interogarea:

SELECT
nume,
tag-uri -> "$ [0]" AS `tag1`
Din "carte";

Pentru un exemplu mai complex, imaginați-vă că avem un tabel de utilizator cu date de profil JSON, de exemplu:

Putem extrage numele Twitter folosind calea JSON:

SELECT
nume, profil -> "$. twitter" AS `twitter`
De la "utilizator";

SELECT
nume, profil -> "$. twitter" AS `twitter`
De la "utilizator"
UNDE
profil -> "$. twitter" nu este NULL;

Efectuarea modificărilor în JSON

Există câteva funcții MySQL care pot modifica documentul JSON atunci când utilizează căi. Acestea includ:

  • JSON_SET (doc, cale, val [, path, val]) -
    inserează sau actualizează date într-un document
  • JSON_INSERT (doc, cale, val [, cale, val].) -
    inserează pepeni în document
  • JSON_REPLACE (doc, cale, val [, cale, val].) -
    înlocuiește datele din document
  • JSON_MERGE (doc, doc [, doc].)
    uneste două documente
  • JSON_ARRAY_APPEND (doc, cale, val [, cale, val].) -
    adaugă valori la sfârșitul matricei
  • JSON_ARRAY_INSERT (doc, cale, val [, cale, val].) -
    adaugă un matrice la document
  • JSON_REMOVE (doc, calea [, calea].) -
    elimină datele din document

Manualul MySQL conține informații suplimentare despre tipul de date JSON și despre funcțiile legate de JSON. Din nou, vă încurajez să nu utilizați JSON decât dacă este absolut necesar. Puteți imita întreaga bază de date NoSQL orientată pe documente în MySQL, dar acest lucru va anula multe din avantajele SQL și puteți merge la sistemul real NoSQL. După cum se spune, tipurile de date JSON pot economisi energie pentru cerințe mai obscure într-o aplicație bazată pe SQL.







Articole similare

Trimiteți-le prietenilor: