Dieser Artikel beschreibt den SQL_Mode-Modus in MySQL anhand von Beispielen. Teilen Sie uns die Einzelheiten zu Ihrer Information mit: In der MySQL-Datenbank gibt es eine Umgebungsvariable sql_mode, die die SQL-Syntax, Datenvalidierung usw. definiert, die MySQL unterstützen soll! Wir können den von der aktuellen Datenbank verwendeten SQL-Modus auf folgende Arten anzeigen: mysql> wähle @@sql_mode; +----------------------------------------------------------------+ | @@sql_mode | +----------------------------------------------------------------+ | STRICT_TRANS_TABLES, KEIN_AUTO_CREATE_USER, KEIN_ENGINE_SUBSTITUTION | +----------------------------------------------------------------+ MySQL 5.0 und höhere Versionen unterstützen drei sql_mode-Modi
1 ANSI-Modus Wenn wir im ANSI-Modus Daten einfügen und die Spaltenlängenanforderung nicht erfüllt ist, werden die Daten erfolgreich eingefügt, aber die Felder, die die Spaltenlänge überschreiten, werden abgeschnitten und es wird eine Warnung ausgegeben. mysql> setze @@sql_mode=ANSI; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> Tabelle erstellen Test (Name varchar (4), Pass varchar (4)); Abfrage OK, 0 Zeilen betroffen (0,03 Sek.) mysql> in Testwerte einfügen('aaaaa','aaaaa'),('bbbb','bbbb'); Abfrage OK, 2 Zeilen betroffen, 2 Warnungen (0,02 Sek.) Datensätze: 2 Duplikate: 0 Warnungen: 2 mysql> Warnungen anzeigen; +---------+------+------------------------------------------+ | Ebene | Code | Nachricht | +---------+------+------------------------------------------+ | Warnung | 1265 | Daten für Spalte „Name“ in Zeile 1 abgeschnitten | | Warnung | 1265 | Daten für Spalte „pass“ in Zeile 1 abgeschnitten | +---------+------+------------------------------------------+ 2 Zeilen im Satz (0,00 Sek.) mysql> wähle * aus Test; +------+------+ | Name | Passwort | +------+------+ | aaaa | aaaa | | bbbb | bbbb | +------+------+ 2 Zeilen im Satz (0,00 Sek.) 2 STRICT_TRANS_TABLES-Modus Im STRICT_TRANS_TABLES-Modus überprüft MySQL die Daten streng, wenn wir Daten einfügen. Wenn festgestellt wird, dass der eingefügte Spaltenwert die Anforderungen nicht erfüllt, wird direkt ein Fehler gemeldet, um sicherzustellen, dass die falschen Daten nicht in die Datenbank eingefügt werden können. mysql> setze @@sql_mode=STRICT_TRANS_TABLES; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> Tabelle erstellen Test (Name varchar (4), Pass varchar (4)); Abfrage OK, 0 Zeilen betroffen (0,02 Sek.) mysql> in Testwerte einfügen('aaaaa','aaaaa'),('bbbb','bbbb'); FEHLER 1406 (22001): Daten zu lang für Spalte „Name“ in Zeile 1 mysql> Fehler anzeigen; +-------+------+------------------------------------------+ | Ebene | Code | Nachricht | +-------+------+------------------------------------------+ | Fehler | 1406 | Daten für Spalte „Name“ in Zeile 1 zu lang | +-------+------+------------------------------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> wähle * aus Test; Leerer Satz (0,00 Sek.) 3 TRADITIONELLER Modus, schauen Sie zuerst, ob die Ergebnisse gleich sind mysql> setze @@sql_mode=TRADITIONAL; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> Tabelle erstellen Test (Name varchar (4), Pass varchar (4)); Abfrage OK, 0 Zeilen betroffen (0,02 Sek.) mysql> in Testwerte einfügen('aaaaa','aaaaa'),('bbbb','bbbb'); FEHLER 1406 (22001): Daten zu lang für Spalte „Name“ in Zeile 1 mysql> Fehler anzeigen; +-------+------+------------------------------------------+ | Ebene | Code | Nachricht | +-------+------+------------------------------------------+ | Fehler | 1406 | Daten für Spalte „Name“ in Zeile 1 zu lang | +-------+------+------------------------------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> wähle * aus Test; Leerer Satz (0,00 Sek.) Sie können jedoch sehen, was nach dem Einstellen passiert mysql> setze @@sql_mode=TRADITIONAL; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> wähle @@sql_mode\G *************************** 1. Reihe *************************** @@sql_mode: STRICT_TRANS_TABLES, STRICT_ALL_TABLES, KEINE_NULL_IM_DATUM, KEIN_NULL_DATUM, FEHLER_FÜR_DIVISION_DURCH_NULL, TRADITIONELL, KEIN_AUTO_CREATE_USER, KEIN_ENGINE_SUBSTITUTION 1 Zeile im Satz (0,00 Sek.) Im TRADITIONAL-Modus werden alle transaktionalen und nicht transaktionalen Speicher-Engines geprüft. Die Monats- und Tagesteile des Datumstyps dürfen keine 0 enthalten, es darf kein Datum wie 0 (0000-00-00) geben, die Daten können nicht durch 0 geteilt werden und die automatische Erstellung neuer Benutzer ist nicht zulässig. endlich: set @@ wird nur auf Sitzungsebene gesetzt. Wenn Sie möchten, dass alles wirksam wird, müssen Sie noch die Konfigurationsdatei setzen vi /etc/meine.cnf Fügen Sie unter [mysqld] die folgende Zeile hinzu: sql_mode=KEIN_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #NO_ENGINE_SUBSTITUTION meldet einen Fehler für eine nicht vorhandene Engine. Wenn es nicht hinzugefügt wird, wird bei der Angabe einer nicht unterstützten Engine der Standard-Innodb angegeben. Darüber hinaus verfügt sql_mode auch über eine Konfiguration ONLY_FULL_GROUP_BY, was bedeutet, dass beim Auswählen von Daten mithilfe von „Group By“ nur die Informationen in der neuen Gruppe angezeigt werden können. Vorgänge vor dem Ändern des Modus mysql> select * aus Mitarbeitergruppe nach Post; +----+--------+--------+-----+------------+-----------------------------------------+---------------+-------------+--------+-----------+ | ID | Name | Geschlecht | Alter | Einstellungsdatum | Post | Post-Kommentar | Gehalt | Büro | Abreise-ID | +----+--------+--------+-----+------------+-----------------------------------------+---------------+-------------+--------+-----------+ | 14 | Zhang Ye | männlich | 28 | 11.03.2016 | Vorgang | NULL | 10000,13 | 403 | 3 | | 9 | 歪歪| weiblich | 48 | 11.03.2015 | Verkauf | NULL | 3000,13 | 402 | 2 | | 2 | Alex | männlich | 78 | 02.03.2015 | Lehrer | NULL | 1000000,31 | 401 | 1 | | 1 | egon | männlich | 18 | 01.03.2017 | Botschafter des Old Boy's Office in Shahe | NULL | 7300,33 | 401 | 1 | +----+--------+--------+-----+------------+-----------------------------------------+---------------+-------------+--------+-----------+ 4 Zeilen im Satz (0,00 Sek.) Zu diesem Zeitpunkt sql_mode: mysql> wähle @@sql_mode; +----------------------------------------------------------------+ | @@sql_mode | +----------------------------------------------------------------+ | STRICT_TRANS_TABLES, KEIN_AUTO_CREATE_USER, KEIN_ENGINE_SUBSTITUTION | +----------------------------------------------------------------+ 1 Zeile im Satz (0,00 Sek.) Ändern Sie es, beenden Sie es und geben Sie es dann erneut ein, damit es wirksam wird mysql> globalen SQL-Modus festlegen = 'STRICT_TRANS_TABLES, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION, ONLY_FULL_GROUP_BY'; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> wähle @@sql_mode; +----------------------------------------------------------------+ | @@sql_mode | +----------------------------------------------------------------+ | STRICT_TRANS_TABLES, KEIN_AUTO_CREATE_USER, KEIN_ENGINE_SUBSTITUTION | +----------------------------------------------------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> beenden Tschüss Erneut eingeben mysql> wähle @@sql_mode; +-----------------------------------------------------------------------------------+ | @@sql_mode | +-----------------------------------------------------------------------------------+ | NUR_VOLLSTÄNDIGE_GROUP_BY, STRENGE_TRANS_TABLES, KEIN_AUTOMATISCHES_ERSTELLEN_BENUTZER, KEIN_ENGINE_SUBSTITUTION | +-----------------------------------------------------------------------------------+ 1 Zeile im Satz (0,00 Sek.) Die geänderten Ergebnisse finden Sie weiter unten. mysql> select * from employee group by post; //Nur Beiträge können angezeigt werden FEHLER 1055 (42000): „t1.employee.id“ ist nicht in GROUP BY mysql> Beitrag aus Mitarbeitergruppe nach Beitrag auswählen; +-----------------------------------------+ | veröffentlichen | +-----------------------------------------+ | Betrieb | | Verkauf | | Lehrer | | Diplomatischer Botschafter des Old Boys Office in Shahe | +-----------------------------------------+ 4 Zeilen im Satz (0,00 Sek.) mysql> wähle ID, Post aus der Mitarbeitergruppe nach Post; FEHLER 1055 (42000): „t1.employee.id“ ist nicht in GROUP BY mysql> select name,post from employee group by post,name; //Anzeige entsprechend der Auswahl nach group by +------------+-----------------------------------------+ | Name | Beitrag | +------------+-----------------------------------------------------+ | Zhang Ye| Betrieb | | Cheng Yaojin | Betrieb | | Cheng Yaotie | Betrieb | | Cheng Yaotong | Betrieb | | Cheng Yaoyin | Betrieb | | Ding Ding | Verkauf | | Yaya | Verkauf | | Sterne | Ausverkauf | | Gege | Verkauf | | Wai Wai | Verkauf | | Alex | Lehrer | | Jingliyang | Lehrer | | Jinxin | Lehrer | | Liwenzhou | Lehrer | | Wupeiqi | Lehrer | | xiaomage | Lehrer | | Yuanhao | Lehrer | | Egon | Diplomatischer Botschafter des Old Boys Office in Shahe | +------------+-----------------------------------------------------+ 18 Zeilen im Satz (0,00 Sek.) Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „MySQL-Abfragekenntnisse“, „Zusammenfassung der allgemeinen MySQL-Funktionen“, „MySQL-Protokolloperationskenntnisse“, „Zusammenfassung der MySQL-Transaktionsoperationskenntnisse“, „MySQL-gespeicherte Prozedurkenntnisse“ und „Zusammenfassung der MySQL-Datenbanksperrenkenntnisse“. Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist. Das könnte Sie auch interessieren:
|
<<: Analyse des Tutorials zur Implementierung der Remote-Anmeldung unter Linux
>>: Natives JS zum Erzielen eines coolen Paging-Effekts
Inhaltsverzeichnis Konfigurieren Sie zuerst packa...
01. Befehlsübersicht Der Befehl „seq“ wird verwen...
Vorwort: MySQL ist ein relationales Datenbankverw...
Das Hinzufügen/Entfernen von Klassen zu Elementen...
Hinweis: Alle Bilder in diesem Artikel stammen au...
Beim Erstellen von Webseiten verwenden wir häufig ...
Bei der tatsächlichen Entwicklung kann der Primär...
Fügen Sie einfach den folgenden Code hinzu, um die...
Nachdem das im vorherigen Artikel besprochene Prob...
Schluss mit Unsinn, Postleitzahl HTML-Teil <di...
【Frage】 Wenn die äußere und die innere Tabelle ve...
Motivation Aus Lerngründen habe ich einen VPS-Die...
1. Warum diesen Artikel schreiben? Sie haben sich...
Inhaltsverzeichnis Vorwort Grundlegende Verwendun...
Wenn ein Webprojekt immer größer wird, werden sei...