Heute habe ich bei der Überprüfung des Parallelitätsproblems der Schnittstelle festgestellt, dass der Parallelitätsdruck, der zuvor durch Redis gelöst wurde, auf MySQL übertragen wurde (Redis hat eine Verzögerung beim Festlegen und Speichern von Daten und muss nach Ablauf der Daten Daten aus der Datenbank abrufen, wodurch eine Lücke entsteht, die das Risiko einer großen Parallelität und mehrerer Dateneinfügungen birgt. Aufgrund des Lastausgleichs kann das Semaphor von PHP nicht verwendet werden, daher müssen wir das Update von MySQL verwenden, um die Parallelität zu lösen. Nach dem Festlegen des Index ist die Geschwindigkeit nicht langsam, aber es tritt Druck auf.) Ich habe festgestellt, dass beim Aktualisieren eines Felds (mit dem Attribut „Dezimalzahl ohne Vorzeichen“) das Eingeben eines negativen Werts keinen Fehler verursacht und automatisch in 0 umgewandelt wird. Nach langer Suche fand ich heraus, dass STRICT_TRANS_TABLES in my.cnf das Problem verursachte. Zu diesem Zeitpunkt müssen Sie zuerst den SQL-Modus verstehen. Der MySQL-Server kann in verschiedenen SQL-Modi arbeiten und auf verschiedene Clients unterschiedliche Modi anwenden. Auf diese Weise kann jede Anwendung den Betriebsmodus des Servers an ihre eigenen Bedürfnisse anpassen. Ein Modus definiert, welche SQL-Syntax MySQL unterstützen soll und welche Art von Datenvalidierungsprüfungen durchgeführt werden sollen. Dies erleichtert die Verwendung von MySQL in verschiedenen Umgebungen und die Verwendung von MySQL in Verbindung mit anderen Datenbankservern. Sie können den Standard-SQL-Modus festlegen, indem Sie mysqld mit der Option --sql-mode="modes" starten. Dieser Wert kann auch leer sein (--sql-mode=""), wenn Sie ihn überschreiben möchten. Sie können den SQL-Modus auch nach dem Start ändern, indem Sie die Variable sql_mode mit der Anweisung SET [SESSION|GLOBAL] sql_mode='modes' festlegen. Das Festlegen einer GLOBAL-Variable erfordert das SUPER-Privileg und wirkt sich auf den Betrieb aller Clients aus, die von diesem Punkt an eine Verbindung herstellen. Das Festlegen einer SESSION-Variable wirkt sich nur auf den aktuellen Client aus. Jeder Client kann seinen eigenen SQL_Mode-Wert für die Sitzung jederzeit ändern. sql_mode ist eine durch Kommas (',') getrennte Liste verschiedener Modi. Den aktuellen Modus können Sie mit der Anweisung SELECT @@sql_mode abfragen. Der Standardwert ist leer (es ist kein Modus festgelegt). Die wichtigsten sql_mode-Werte sind: ANSI Ändert Syntax und Verhalten, um eine größere Konsistenz mit Standard-SQL zu erreichen. STRICT_TRANS_TABLES Wenn der angegebene Wert nicht in die Transaktionstabelle eingefügt werden kann, wird die Anweisung abgebrochen. Bei nicht transaktionalen Tabellen wird die Anweisung abgebrochen, wenn der Wert in einer einzeiligen Anweisung oder in Zeile 1 einer mehrzeiligen Anweisung erscheint. TRADITIONELL Sorgen Sie dafür, dass sich MySQL wie ein „herkömmliches“ SQL-Datenbanksystem verhält. Eine einfache Beschreibung dieses Modus lautet: „Gibt einen Fehler statt einer Warnung aus“, wenn in eine Spalte ein falscher Wert eingefügt wird. Hinweis: Brechen Sie INSERT/UPDATE sofort ab, wenn ein Fehler auftritt. Dies ist nicht erwünscht, wenn Sie eine nicht transaktionale Speicher-Engine verwenden, da Datenänderungen, die vor dem Fehler vorgenommen wurden, nicht „übernommen“ werden, was zu „teilweise ausgeführten“ Aktualisierungen führt. In diesem Handbuch wird unter „striktem Modus“ ein Modus verstanden, in dem mindestens STRICT _TRANS_TABLES oder STRICT _ALL_TABLES aktiviert ist. Im Folgenden sind die Unterschiede zwischen den Modi STRICT_TRANS_TABLES und STRICT_ALL_TABLES aufgeführt: Bei Transaktionstabellen tritt bei aktiviertem STRICT_ALL_TABLES- oder STRICT_TRANS_TABLES-Modus ein Fehler auf, wenn die Anweisung ungültige oder fehlende Werte enthält. Die Aussage wird verworfen und verworfen. Bei nicht transaktionalen Tabellen verhalten sich beide Modi identisch, wenn in der ersten Zeile einer Einfügung oder Aktualisierung ein fehlerhafter Wert auftritt. Die Anweisung wird abgebrochen und die Tabelle bleibt unverändert. Wenn die Anweisung mehrere Zeilen einfügt oder ändert und der fehlerhafte Wert in der zweiten oder einer späteren Zeile auftritt, hängt das Ergebnis davon ab, welche strikte Option aktiviert ist: Bei STRICT_ALL_TABLES gibt MySQL einen Fehler zurück und ignoriert die verbleibenden Zeilen. In diesem Fall wurde die vorhergehende Zeile jedoch bereits eingefügt oder aktualisiert. Dies bedeutet, dass Sie ein teilweises Update durchführen können, was wahrscheinlich nicht das ist, was Sie möchten. Um dies zu vermeiden, verwenden Sie am besten Einzelzeilenanweisungen, da diese verworfen werden können, ohne die Tabelle zu ändern. Bei STRICT_TRANS_TABLES konvertiert MySQL den unzulässigen Wert in den nächstgelegenen zulässigen Wert für die Spalte und fügt den angepassten Wert ein. Wenn der Wert fehlt, fügt MySQL einen impliziten Standardwert in die Spalte ein. In beiden Fällen generiert MySQL eine Warnung, anstatt einen Fehler auszugeben und mit der Ausführung der Anweisung fortzufahren. Andere Modi umfassen: ALLOW_INVALID_DATES: Überprüft nicht vollständig die Gültigkeit des Datums, prüft nur, ob der Monat zwischen 1 und 12 liegt, und ob der Tag zwischen 1 und 31 liegt; gilt nur für DATE und DATETIME, nicht jedoch für TIMESTAMP, da TIMESTAMP immer eine gültige Eingabe erfordert. ANSI_QUOTES: Wenn aktiviert, können Sie keine Anführungszeichen verwenden, um Zeichenfolgen zu zitieren, da " (Anführungszeichen) als Bezeichner interpretiert wird ERROR_FOR_DIVISION_BY_ZERO: Wenn aktiviert, tritt beim Einfügen oder Aktualisieren ein Fehler auf, wenn die Daten durch Null (oder MOD(x,0)) geteilt werden. Wenn nicht aktiviert, tritt eine Warnung auf und das System gibt NULL zurück, wenn die Daten durch Null geteilt werden. HIGH_NOT_PRECEDENCE: Wenn aktiviert, können Sie die Priorität der vorherigen alten Version abrufen: NO_AUTO_CREATE_USER: Verhindert, dass GRANT Benutzer mit leeren Passwörtern erstellt. NO_AUTO_VALUE_ON_ZERO: Das Einfügen von 0 oder NULL in eine Auto-Inkrement-Spalte ist nicht der nächste Auto-Inkrement-Wert. NO_BACKSLASH_ESCAPES: Der Backslash "\" wird als normales Zeichen und nicht als Escape-Zeichen behandelt. NO_DIR_IN_CREATE: Ignorieren Sie beim Erstellen einer Tabelle alle Indexverzeichnis- und Datenverzeichnisoptionen. NO_ENGINE_SUBSTITUTION: Wenn aktiviert, wird ein Fehler ausgegeben, falls die erforderliche Speicher-Engine deaktiviert oder nicht kompiliert ist; wenn nicht aktiviert, wird stattdessen die Standard-Speicher-Engine verwendet und eine Ausnahme ausgegeben. NO_UNSIGNED_SUBSTRACTION: Wenn aktiviert, gibt die Subtraktion zweier UNSIGNED-Typen einen SIGNED-Typ zurück. NO_ZERO_DATE: Wenn aktiviert, dürfen keine Nulldaten wie „0000-00-00 00:00:00“ eingefügt werden. Dies führt zu einem Fehler. Wenn nicht aktiviert, können sie eingefügt werden, es wird jedoch nur eine Warnung ausgegeben. NO_ZERO_IN_DATE: Wenn aktiviert, dürfen Monat und Tag nicht Null sein. Wenn diese Option zusammen mit NO_ZERO_DATE aktiviert ist, z. B. „1999-01-00“, wird anstelle einer Warnung ein Fehler ausgegeben. Wenn diese Option alleine aktiviert wird, wird eine Warnung ausgegeben und dann „0000-00-00 00:00:00“ eingefügt. ONLY_FULL_GROUP_BY: Bei GROUP BY-Aggregationsvorgängen ist diese SQL-Anweisung ungültig, wenn die Spalten in der Auswahl nicht in der Gruppierung erscheinen. PAD_CHAR_TO_FULL_LENGTH: Wenn aktiviert, kürzt der CHAR-Typ keine leeren Daten; PIPES_AS_CONCAT: Behandeln Sie „||“ als Verkettungsoperator statt als „oder“-Operator. REAL_AS_FLOAT: Behandeln Sie REAL als Synonym für FLOAT und nicht als Synonym für DOUBLE. Kombinationsmöglichkeiten: ·ANSI: REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, ANSI ·ORAKEL: PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, KEINE_SCHLÜSSELOPTIONEN, KEINE_TABELLENOPTIONEN, KEINE_FELDOPTIONEN, KEIN_AUTO_CREATE_USER, ORACLE TRADITIONELL: STRICT_TRANS_TABLES, STRICT_ALL_TABLES, KEINE_NULL_IM_DATUM, KEIN_NULL_DATUM, FEHLER_FÜR_DIVISION_DURCH_NULL, KEIN_AUTO_CREATE_USER, KEIN_ENGINE_SUBSTITUTION, TRADITIONELL MSSQL: PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, MSSQL, KEINE_SCHLÜSSELOPTIONEN, KEINE_TABELLENOPTIONEN, KEINE_FELDOPTIONEN, MSSQL DB2: PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, KEINE_SCHLÜSSELOPTIONEN, KEINE_TABELLENOPTIONEN, KEINE_FELDOPTIONEN, DB2 MYSQL323: HIGH_NOT_PRECEDENCE, MYSQL323 MYSQL40: HIGH_NOT_PRECEDENCE, MYSQL40 MAXDB: PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, KEINE_SCHLÜSSELOPTIONEN, KEINE_TABELLENOPTIONEN, KEINE_FELDOPTIONEN, KEIN_AUTO_CREATE_USER, MAXDB Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: JavaScript implementiert eine verschiebbare Modalbox
>>: Nach dem Absenden des Formulars zu einer anderen Datei wechseln
Code <div Klasse="Test"> <div&...
In Vue haben wir im Allgemeinen Front-End- und Ba...
Der Ereignisplaner in MySQL, EVENT, wird auch als...
Das geschäftliche Social-Networking-Portal Linked...
Während der Systemwartung müssen Sie möglicherwei...
Diese Spezifikationen sollen die Veröffentlichung ...
Inhaltsverzeichnis Geschäftsszenario: Wirkungsdem...
Problembeschreibung Ich hatte kürzlich ein Proble...
Der Fortschrittsbalken ist nicht gleichmäßig Ich ...
1. Die Organisationsstruktur des Hypertext-Dokumen...
mysql ruft alle Daten oder Monate in einem Zeitra...
Inhaltsverzeichnis Warum brauchen wir Docker? Bei...
Vorwort: Dieser Artikel stellt hauptsächlich den ...
Tutorial zu HTML-Formular-Tags. In diesem Abschni...
Gängige Konventions-Tags Selbstschließende Tags, ...