Dieser Artikel untersucht die Details der JSON -Implementierung in MySQL 9.1 und setzt das Argument fort Merkmale. Sowohl MySQL 5.7 InnoDB -Datenbank als auch PostgreSQL 9.2 unterstützen direkt das Speichern von JSON -Dokumenttypen in einem einzelnen Feld.
Es ist zu beachten, dass jede Datenbank JSON -Dokumente als einzelne String -Blob speichern kann. MySQL und PostgreSQL unterstützen jedoch das Speichern von validierten JSON-Daten als echte Schlüsselwertpaare anstelle von einfachen Zeichenfolgen.
Schlüsselpunkte
speichern JSON -Dokumente in der MySQL JSON -Spalte nicht, dass Sie dies
tun solltenNormalisierung ist eine Technologie zur Optimierung der Datenbankstruktur. Die erste Regel der Normalformel (1NF) sieht vor, dass jede Spalte einen einzelnen Wert enthalten sollte-und das Speichern von JSON-Dokumenten mit mehreren bewerteten JSON-Dokumenten verstößt offensichtlich gegen diese Regel.
Wenn Ihre Daten klare relationale Datenanforderungen haben, verwenden Sie bitte das entsprechende Einzelwertfeld. JSON sollte als letztes Mittel mit Vorsicht verwendet werden. JSON Value Fields können nicht direkt indiziert werden. Vermeiden Sie sie daher, sie in häufig aktualisierten oder durchsuchten Spalten zu verwenden.
Funktionsindexierung generierter Spalten, die aus JSON -Daten abgeleitet wurden, ermöglicht es Ihnen, bestimmte Teile von JSON -Objekten zu indexieren, wodurch die Abfrageleistung verbessert wird.
Das heißt, JSON hat einige gute Anwendungsfälle für spärliche Daten oder benutzerdefinierte Eigenschaften.
Erstellen Sie eine Tabelle mit JSON -Datentypspalte
Betrachten Sie ein Geschäft, das Bücher verkauft. Alle Bücher haben ID, ISBN, Titel, Verlag, Seitenzahl und andere klare relationale Daten.
Wenn Sie jetzt so viele Kategorie -Tags zu jedem Buch hinzufügen möchten. Sie können es in SQL mit der folgenden Methode implementieren:
CREATE TABLE `book` ( `id` MEDIUMINT() UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(200) NOT NULL, `tags` JSON DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB;
Mit MySQL 9.1 können Sie jedoch Funktionsindizes für generierte Spalten erstellen, die aus JSON -Daten abgeleitet wurden, die die Indizierung spezifischer Elemente in JSON -Dokumenten ermöglicht. Diese erzeugten Spalten können virtuell oder als Hilfsinizes gespeichert und indiziert werden.
ALTER TABLE book ADD COLUMN first_tag VARCHAR(50) AS (JSON_UNQUOTE(tags->'$[0]')), ADD INDEX idx_first_tag (first_tag);
add JSON -Daten
Zum Beispiel können unsere Buch -Tags als Array (innerhalb einer Zeichenfolge) übergeben werden:
INSERT INTO `book` (`title`, `tags`) VALUES ( 'ECMAScript 2015: A SitePoint Anthology', '["JavaScript", "ES2015", "JSON"]' );
-- 返回ARRAY: SELECT JSON_TYPE('[1, 2, "abc"]'); -- 返回OBJECT: SELECT JSON_TYPE('{"a": 1, "b": 2}'); -- 返回错误: SELECT JSON_TYPE('{"a": 1, "b": 2');
-- 返回1: SELECT JSON_TYPE('[1, 2, "abc"]'); -- 返回1: SELECT JSON_TYPE('{"a": 1, "b": 2}'); -- 返回0: SELECT JSON_TYPE('{"a": 1, "b": 2');
Suche nach JSON -Dokumenten in der MySQL JSON -Spalte
-- 所有带有“JavaScript”标签的书籍: SELECT * FROM `book` WHERE JSON_CONTAINS(tags, '["JavaScript"]');
Sie können auch angeben, ob Sie alle Übereinstimmungen oder eine einzelne Übereinstimmung finden müssen, indem Sie die "One "- und" All "-Flags und -Suchketten übergeben (wobei % eine beliebige Anzahl von Zeichen übereinstimmt, _ mit einem Zeichen wie ähnlich). Zum Beispiel:
-- 所有标签以“Java”开头的书籍: SELECT * FROM `book` WHERE JSON_SEARCH(tags, 'one', 'Java%') IS NOT NULL;
SELECT * FROM JSON_TABLE( '[{"tag": "SQL"}, {"tag": "JSON"}]', '$[*]' COLUMNS (tag VARCHAR(50) PATH '$.tag') ) AS tags_table;
JSON Path
MySQL JSON -Abfrage mit der Funktion json_extract () kann spezifische Werte aus JSON -Dokumenten basierend auf dem angegebenen Pfad abrufen.
CREATE TABLE `book` ( `id` MEDIUMINT() UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(200) NOT NULL, `tags` JSON DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB;
Alle Pfaddefinitionen beginnen mit $, gefolgt von anderen Selektoren:
Das folgende Beispiel bezieht sich auf das folgende JSON -Dokument:
ALTER TABLE book ADD COLUMN first_tag VARCHAR(50) AS (JSON_UNQUOTE(tags->'$[0]')), ADD INDEX idx_first_tag (first_tag);
Pfad Beispiel:
Sie können JSON verwenden, um MySQL -Funktionen zu extrahieren, um den Namen und das erste Tag aus Ihrer Buchtabelle effektiv zu extrahieren:
INSERT INTO `book` (`title`, `tags`) VALUES ( 'ECMAScript 2015: A SitePoint Anthology', '["JavaScript", "ES2015", "JSON"]' );
Für komplexere Beispiele verfügen Sie über eine Benutzertabelle mit JSON -Konfigurationsdateidaten. Zum Beispiel:
id | name | profile |
---|---|---|
1 | Craig | { "email": ["craig@email1.com", "craig@email2.com"], "twitter": "@craigbuckler" } |
2 | SitePoint | { "email": [], "twitter": "@sitepointdotcom" } |
Sie können den JSON -Pfad verwenden, um den Twitter -Namen zu extrahieren. Zum Beispiel:
CREATE TABLE `book` ( `id` MEDIUMINT() UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(200) NOT NULL, `tags` JSON DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB;
Sie können den JSON -Pfad in der WHERE -Klausel verwenden, um nur Benutzer mit einem Twitter -Konto zurückzugeben:
ALTER TABLE book ADD COLUMN first_tag VARCHAR(50) AS (JSON_UNQUOTE(tags->'$[0]')), ADD INDEX idx_first_tag (first_tag);
einen Teil des JSON -Dokuments
ändern
Es gibt mehrere MySQL -Funktionen, die einen Teil eines JSON -Dokuments mithilfe der Pfadnotation ändern können. Diese Funktionen umfassen:
Wenn Sie beispielsweise einem Buch mit einem "javaScript" -Tag ein "technisches" Tag hinzufügen möchten, können Sie die Funktion json_merge_patch () verwenden:
INSERT INTO `book` (`title`, `tags`) VALUES ( 'ECMAScript 2015: A SitePoint Anthology', '["JavaScript", "ES2015", "JSON"]' );
Weitere Informationen
MySQL -Dokumentation enthält detaillierte Informationen zu MySQL JSON -Datentypen und zugehörigen JSON -Funktionen.
Erinnern Sie noch einmal, verwenden Sie JSON nicht, es sei denn, dies ist absolut erforderlich. Sie können die gesamte dokumentorientierte NoSQL-Datenbank in MySQL simulieren, dies wird jedoch viele der Vorteile von SQL ausgleichen, und Sie können auch direkt auf ein echtes NoSQL-System wechseln!
dh für die vagen Datenanforderungen in SQL -Anwendungen können JSON -Datentypen einige Anstrengungen sparen.
Häufig gestellte Fragen zur Verwendung von JSON -Daten in MySQL
Können Sie JSON in MySQL verwenden?
MySQL unterstützt JSON durch Bereitstellung eines JSON -Datentyps, mit dem Daten in JSON -Format in Spalten gespeichert werden. Ausgehend von MySQL 5.7.8 können Sie Tabellen mit JSON -Spalten erstellen, mit denen Sie JSON -Daten mit SQL einfügen, aktualisieren und abfragen können. MySQL bietet eine Reihe von JSON -Funktionen, um JSON -Daten in diesen Spalten zu verarbeiten, damit JSON -Daten extrahiert, modifiziert und manipuliert werden können.
Zusätzlich können Sie JSON -Daten in SQL -Abfragen verwenden und sie unter Verwendung von Funktionen wie json_table bei Bedarf in relationale Daten umwandeln. Es ist jedoch wichtig zu verstehen, dass MySQL im Grunde eine relationale Datenbank mit JSON-Datentyp-Unterstützung ist, die die Verarbeitung von JSON-Daten in einem relationalen Kontext erleichtert, anstatt eine vollwertige NOSQL-JSON-Datenbank zu werden.
Wie oben erwähnt, bedeutet dies, dass Sie dies nicht speichern können. Sie sollten dies tun: Normalisierung ist eine Technik zur Optimierung der Datenbankstruktur. In der ersten Regel der Normalformel (1NF) heißt es, dass jede Spalte einen einzelnen Wert enthalten sollte-und das Speichern mehrwertiger JSON-Dokumente verstößt gegen diese Regel.
Ist es in Ordnung, JSON in MySQL zu speichern?
speichern JSON in MySQL ist in Ordnung, wenn:
JSON sollte jedoch nicht die normalisierte relationale Speicherung von strukturierten und häufig abfragenden Daten ersetzen. Während MySQL 9.1 die JSON -Funktionalität mit Funktionen wie Funktionsindexierung und JSON_TABLE verbessert, können JSON -Operationen für große Datensätze oder komplexe Abfragen immer noch dazu führen.
Wie kann ich JSON in MySQL -Abfrage verwenden?
Sie können JSON in MySQL -Abfragen verwenden, indem Sie die JSON -Funktion von MySQL verwenden. Diese Funktionen ermöglichen es Ihnen, JSON -Daten zu extrahieren, zu manipulieren und abzufragen, die in JSON -Saiten in JSON -Spalten oder Datenbanken gespeichert sind. Um auf JSON -Daten in einer JSON -Spalte zuzugreifen, verwenden Sie den -& gt;
JSON_EXTRACT, JSON_SET und JSON_OBJECTAGG und andere JSON -Funktionen ermöglichen es Ihnen, JSON -Daten zu filtern, zu ändern, zu aggregieren und zu verarbeiten. Sie können auch die WHERE -Klausel verwenden, um Zeilen basierend auf JSON -Werten zu filtern. Die JSON -Funktionalität von Mysql bietet eine flexible Möglichkeit, JSON -Objekte direkt in Datenbankabfragen zu interagieren und zu manipulieren.
Wann sollte ich JSON in MySQL verwenden?
Sie sollten JSON unter folgenden Umständen in MySQL verwenden:
Vermeiden Sie jedoch, JSON zu verwenden, wenn:
Wie speichern Sie JSON -Daten in MySQL?
Um JSON -Daten in MySQL zu speichern, haben Sie zwei Hauptoptionen. Zunächst können Sie den in MySQL eingeführten JSON -Datentyp verwenden, um eine Tabelle mit JSON -Spalten zu erstellen. Diese Methode bietet einen strukturierten Speicher und eine bessere Abfrageleistung für JSON -Daten.
Alternativ können Sie JSON -Daten als Text in den regulären Varchar- oder Textspalten speichern. Diese Methode gilt, wenn sie in erster Linie JSON -Daten ohne komplexe Datenbankvorgänge speichern und abrufen müssen.
Wie kann ich JSON -Daten in MySQL indexieren?
Obwohl Sie JSON -Spalten nicht direkt indexieren können, können Sie mit MySQL Funktionsindizes für generierte Spalten erstellen, die von JSON -Werten abgeleitet wurden.
Zum Beispiel, um das erste Element des JSON -Arrays zu indizieren:
CREATE TABLE `book` ( `id` MEDIUMINT() UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(200) NOT NULL, `tags` JSON DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB;
Diese Methode verbessert die Abfrageleistung für häufig auf JSON -Pfade.
Sollten Sie für JSON -Daten die MySQL- oder NoSQL -Datenbank verwenden?
Es hängt von Ihren Projektanforderungen ab:
Mysql ist ideal für Hybrid -Workloads, ist jedoch kein vollständiger Ersatz für NoSQL -Datenbanken speziell für den Dokumentspeicher.
Wie extrahiert man spezifische Werte aus dem Feld MySQL JSON?
Um einen bestimmten Wert aus dem Feld MySQL JSON zu extrahieren, verwenden Sie die Funktion json_extract () oder die Abkürzung -& gt;
ALTER TABLE book ADD COLUMN first_tag VARCHAR(50) AS (JSON_UNQUOTE(tags->'$[0]')), ADD INDEX idx_first_tag (first_tag);
Wie kann und filtern Sie Daten in MySQL JSON -Feldern ab?
Um Daten abzufragen und zu filtern, die in MySQL JSON -Feldern gespeichert sind, können Sie Funktionen wie json_contains () und json_search () verwenden. Sie können auch json_extract () verwenden, um bestimmte Werte für die weitere Filterung abzurufen.
INSERT INTO `book` (`title`, `tags`) VALUES ( 'ECMAScript 2015: A SitePoint Anthology', '["JavaScript", "ES2015", "JSON"]' );
Das obige ist der detaillierte Inhalt vonSo verwenden Sie JSON -Datenfelder in MySQL -Datenbanken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!