Datenabfragevorgang im MySQL-JSON-Format

Datenabfragevorgang im MySQL-JSON-Format

Der Standardtabellenname ist „base_data“ und der JSON-Spaltenname ist „json_value“

Der Wert von json_value ist

{“ids”:[“a”,“b”],“datas”:[{“name”:“Name”}]}

Dann sollte die Abfrage sein

Wählen Sie * aus Basisdaten, wobei JSON_CONTAINS(json_value -> "$.ids", JSON_ARRAY('a'));

oder

Wählen Sie * aus Basisdaten, wobei JSON_CONTAINS(json_value -> "$.ids[*]", JSON_ARRAY('a'));

Beides ist in Ordnung, der spezifische Unterschied ist noch unbekannt

Ergänzendes Wissen: Das Problem, dass das varchar-Feld von MySQL automatisch abgeschnitten wird, wenn die Länge den Grenzwert überschreitet ----- Beschreibung und Einstellungen des sql_mode-Modus von MySQL

Sinnvolle Einstellung des MySQL sql_mode

sql_mode ist eine Variable, die leicht übersehen wird. Der Standardwert ist null. Mit dieser Einstellung können einige unzulässige Vorgänge zugelassen werden, z. B. das Einfügen einiger unzulässiger Daten. In der Produktionsumgebung muss dieser Wert auf den strikten Modus eingestellt werden, daher muss auch die Datenbank der Entwicklungs- und Testumgebung entsprechend eingestellt werden, damit Probleme während der Entwicklungs- und Testphase erkannt werden können.

Das SQL-Modell wird häufig zur Lösung der folgenden Arten von Problemen verwendet

(1) Durch Einstellen des SQL-Modus können Sie die Datenüberprüfung mit unterschiedlichen Strengegraden durchführen und so die Datenbereitschaft effektiv sicherstellen.

(2) Indem wir das SQL-Modell auf den Loose-Modus setzen, können wir sicherstellen, dass die meisten SQL-Anweisungen der Standard-SQL-Syntax entsprechen. Auf diese Weise müssen wir beim Migrieren von Anwendungen zwischen verschiedenen Datenbanken keine größeren Änderungen an den geschäftlichen SQL-Anweisungen vornehmen.

(3) Bevor Sie Daten zwischen verschiedenen Datenbanken migrieren, können Sie den SQL-Modus einstellen, um die Migration von Daten von MySQL in die Zieldatenbank zu erleichtern.

Übliche Werte für sql_mode sind wie folgt:

NUR_VOLLSTÄNDIG_GRUPPIEREN_NACH:

Bei GROUP BY-Aggregationsvorgängen gilt: Wenn die Spalten in SELECT nicht in GROUP BY erscheinen, ist dieses SQL ungültig, da die Spalten nicht in der GROUP BY-Klausel enthalten sind.

KEIN_AUTO_WERT_AUF_NULL:

Dieser Wert wirkt sich auf Einfügungen in Auto-Increment-Spalten aus. Standardmäßig bedeutet das Einfügen von 0 oder NULL, dass der nächste Auto-Inkrement-Wert generiert wird. Diese Option ist nützlich, wenn der Benutzer einen Wert von 0 einfügen möchte und die Spalte automatisch inkrementiert wird.

STRICT_TRANS_TABLES:

Wenn in diesem Modus ein Wert nicht in eine Transaktionstabelle eingefügt werden kann, wird der aktuelle Vorgang unterbrochen und es werden keine Einschränkungen für Nicht-Transaktionstabellen auferlegt.

NO_ZERO_IN_DATE:

Im strikten Modus sind Tages- und Monatswerte von Null nicht zulässig.

NO_ZERO_DATE:

Durch Festlegen dieses Werts lässt die MySQL-Datenbank das Einfügen von Nulldaten nicht zu. Das Einfügen von Nulldaten führt zu einem Fehler statt einer Warnung.

FEHLER BEI DIVISION DURCH NULL:

Wenn bei einem INSERT oder UPDATE Daten durch Null geteilt werden, wird ein Fehler und keine Warnung generiert. Wenn dieser Modus nicht angegeben ist, gibt MySQL NULL zurück, wenn der Wert durch Null geteilt wird.

NO_AUTO_CREATE_USER:

Verhindern Sie, dass GRANT Benutzer mit leeren Passwörtern erstellt

KEIN_ENGINE_SUBSTITUTION:

Wenn die erforderliche Speicher-Engine deaktiviert oder nicht kompiliert ist, wird ein Fehler ausgegeben. Wenn dieser Wert nicht festgelegt ist, wird stattdessen die Standardspeicher-Engine verwendet und eine Ausnahme ausgelöst.

PIPES_AS_CONCAT:

Behandeln Sie „||“ als einen String-Verkettungsoperator und nicht als einen ODER-Operator. Dies entspricht der Oracle-Datenbank und ähnelt der String-Verkettungsfunktion Concat.

ANSI_QUOTES:

Wenn ANSI_QUOTES aktiviert ist, können Sie keine Anführungszeichen zum Zitieren von Zeichenfolgen verwenden, da diese als Bezeichner interpretiert werden.

Die sql_mode-Einstellung von ORACLE entspricht:

PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, KEINE_SCHLÜSSELOPTIONEN, KEINE_TABELLENOPTIONEN, KEINE_FELDOPTIONEN, KEIN_AUTO_CREATE_USER.

Wenn Sie MySQL verwenden, können Sie den SQL-Modus von MySQL wie folgt festlegen, damit jeder weiterhin an die Verwendung von Oracle gewöhnt ist:

Fügen Sie die folgende Konfiguration in my.cnf hinzu

[mysqld]

sql_mode = 'NUR_VOLLSTÄNDIGE_GRUPPE_BY, KEIN_AUTOMATISCHER_WERT_ BEI_NULL, STRICT_TRANS_TABLES, KEINE_NULL_IM_DATUM, KEIN_NULL_DATUM,

FEHLER BEI DIVISION DURCH NULL, KEIN AUTOMATISCHES ERSTELLEN VON BENUTZERN, PIPES_AS_CONCAT, ANSI_QUOTES'

Beachten:

Die Standardparameter sql_mode von MySQL 5.6 und MySQL 5.7 sind unterschiedlich. Der Modus von 5.6 ist NO_ENGINE_SUBSTITUTION, was tatsächlich einen Nullwert darstellt, was keiner Moduseinstellung entspricht und als lockerer Modus verstanden werden kann. Der Modus von 5.7 ist STRICT_TRANS_TABLES, also der strikte Modus.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers ::::::::::: Sie werden feststellen, dass MySQL im Laufe der Zeit neben der Datenüberprüfung noch viele weitere Dinge kann, die Sie in Ihrem Programm tun.

Probleme, die nach dem Wechsel in den strikten Modus auftreten können:

Wenn der Einstellungsmodus NO_ZERO_DATE enthält, lässt die MySQL-Datenbank das Einfügen von Nulldaten nicht zu, und das Einfügen von Nulldaten führt zu einem Fehler statt einer Warnung. Beispielsweise wird einer TIMESTAMP-Spalte in einer Tabelle (sofern sie nicht als NULL deklariert ist oder eine DEFAULT-Klausel enthält) automatisch DEFAULT '0000-00-00 00:00:00' (Null-Zeitstempel) zugewiesen, oder die Tagesspalte in der Tabelle dieses Tests ermöglicht standardmäßig die Einfügung eines Nulldatums '0000-00-00' COMMENT 'Datum'. Diese erfüllen im SQL-Modus offensichtlich nicht NO_ZERO_DATE und melden einen Fehler.

Einstellen und Ändern des Modus (am Beispiel der Lösung des obigen Problems):

Methode 1:

Führen Sie zuerst select @@sql_mode aus, kopieren Sie den abgefragten Wert und löschen Sie NO_ZERO_IN_DATE und NO_ZERO_DATE. Führen Sie dann set sql_mode = 'modified value' oder set session sql_mode = 'modified value'; aus, zum Beispiel: set session sql_mode = 'STRICT_TRANS_TABLES'; um in den strikten Modus zu wechseln.

Diese Methode ist nur in der aktuellen Sitzung wirksam und wird nicht wirksam, wenn die aktuelle Sitzung geschlossen wird.

Methode 2:

Führen Sie zuerst „select @@global.sql_mode“ aus, kopieren Sie den abgefragten Wert und löschen Sie NO_ZERO_IN_DATE und NO_ZERO_DATE. Führen Sie dann „set global sql_mode = 'modified value'“ aus.

Diese Methode ist im aktuellen Dienst wirksam und wird nach einem Neustart des MySQL-Dienstes ungültig.

Methode 3: Fügen Sie im MySQL-Installationsverzeichnis oder in der Datei my.cnf (my.ini-Datei in Windows) hinzu

sql_mode = NUR_VOLLSTÄNDIGE_GRUPPE_NUR, STRENGE_TRANS_TABELLEN, FEHLER_FÜR_DIVISION_DURCH_NULL, KEIN_AUTOMATISCHES_ERSTELLEN_BENUTZER, KEIN_ENGINE_SUBSTITUTION,

Fügen Sie my.cnf wie folgt hinzu:

[mysqld]

sql_mode=NUR_VOLLSTÄNDIGE_GRUPPE_NUR, STRENGE_TRANS_TABELLEN, FEHLER_FÜR_DIVISION_DURCH_NULL, KEIN_AUTO_CREATE_USER

Starten Sie dann MySQL neu.

Diese Methode ist dauerhaft wirksam. Natürlich ist ein Neustart des MySQL-Dienstes in der Produktionsumgebung verboten, daher werden Methode 2 und Methode 3 verwendet, um Online-Probleme zu lösen. Selbst wenn der MySQL-Dienst dann eines Tages tatsächlich neu gestartet wird, ist er dauerhaft wirksam.

Die obige Datenabfrageoperation im MySQL-JSON-Format ist der gesamte Inhalt, den der Editor mit Ihnen teilt. Ich hoffe, dass er Ihnen als Referenz dienen kann. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden.

Das könnte Sie auch interessieren:
  • MySQL und PHP Grundlagen und Anwendungen: Datenabfrage
  • Eine kurze Diskussion darüber, ob zu viele MySQL-Datenabfragen OOM verursachen
  • Detaillierte Erläuterung der MySQL-Datenbank mit zig Millionen Datenabfragen und -speicherungen
  • Optimieren der langsamen Abfrage von MySQL-Aggregatstatistikdaten
  • Erfahrungsaustausch zur Optimierung von MySQL-Big-Data-Abfragen (empfohlen)
  • MySQL- und PHP-Grundlagen und -Anwendungen: Datenabfrageanweisungen

<<:  Lösung zur automatischen Beendigung von Docker Run-Containern

>>:  Eine kurze Diskussion über den Unterschied zwischen src und href in HTML

Artikel empfehlen

Erste Schritte Tutorial für Anfänger ④: So binden Sie Unterverzeichnisse

Um zu verstehen, was das bedeutet, müssen wir zunä...

Sieben Möglichkeiten zur Implementierung der Array-Deduplizierung in JS

Inhaltsverzeichnis 1. Verwenden von Set()+Array.f...

Mobile Web-Bildschirmanpassung (rem)

Vorwort Ich habe vor Kurzem meine bisherigen Noti...

Implementierungsschritte zum Erstellen mehrseitiger Programme mit Webpack

Es ist sehr üblich, webpack zum Erstellen einseit...

CSS3-Implementierungsbeispiel zum Drehen nur des Hintergrundbildes um 180 Grad

1. Mentale Reise Als ich kürzlich das Cockpit sch...

Diskussion über Web-Nachahmung und Plagiat

Einige Monate nachdem ich 2005 in die Branche eing...

Beispielcode zur Implementierung der Schnittstellensignatur mit Vue+Springboot

1. Umsetzungsideen Der Zweck der Schnittstellensi...