MySQL: Syntax
Die Kommunikation mit der MySQL-Datenbank erfolgt über SQL-Befehle. Die folgenden Kapitel beschreiben, welche Befehle es gibt (zumindest die wichtigsten), nach welchen Regeln sie funktionieren und was sie bewirken.Allgemeines zur Syntax
Befehle in MySQL
Die Kommunikation mit mySQL erfolgt grundsätzlich über Befehle. Die häufigste Form, mySQL-Befehle auszuführen, ist der MySQL-Monitor. Daneben werden auch in php MySQL Admin SQL-Befehle im entsprechenden Eingabefenster eingegeben und ausgeführt. Diese Möglichkeit bleibt allerdings meist dem Administrator vorbehalten.In größeren Anwendungen arbeiten die Anwender natürlich weder mit php MySQL Admin noch mit dem MySQL-Monitor, sondern sie benutzen Oberflächen, die in höheren Programmiersprachen erstellt sind, z.B. mit C++ oder VB. Dort sehen sie meist nichts von den zugrunde liegenden SQL-Befehlen, da diese in den Programm-Quellcode eingebettet sind.
Das Wort Syntax ist aus der Sprachwissenschaft entlehnt. Bei MySQL bedeutet Syntax, ob ein Befehl richtig geschrieben wird, so dass er ausgeführt werden kann. Dazu gehört, dass alle Bestandteile (Wörter und Zeichen) zum Befehlssatz von MySQL gehören, zueinander passen und in der richtigen Reihenfolge aufeinander folgen. Wenn die Syntax stimmt, wird der Befehl geparst (vereinfacht ausgedrückt: es wird geprüft, ob es die angegebenen Tabellen, Felder usw. auch gibt) und dann ausgeführt. Wenn die Syntax nicht stimmt, kann der Befehl nicht ausgeführt werden, stattdessen wird eine Fehlermeldung ausgegeben (angezeigt): Syntaxfehler:... Typische Syntaxfehler sind Schreibfehler (wher statt where) oder das Weglassen von notwendigen Teilen des Befehls.
Jeder MySQL-Befehl wird mit einem Semikolon abgeschlossen, was aber nicht immer zwangsläufig notwendig ist. Wenn im MySQL-Monitor nach einem Semikolon die ENTER-Taste gedrückt bzw. im php MySQL Admin-SQL-Fenster auf Ok geklickt wird, wird der Befehl sofort ausgeführt. Am Semikolon erkennt MySQL , wo ein Befehl zu Ende ist. So ist es möglich, einen Befehl auf mehrere Zeilen zu verteilen (genauso wie z.B. in C++). Das erhöht die Übersicht.
MySQL basiert auf SQL (Structured Query Language), einer standardisierten Bearbeitungssprache, die in fast identischer Form in allen verbreiteten relationalen Datenbanken Anwendung findet. SQL ist eine Sammlung von Befehlen, ist aber vom Umfang her im Vergleich zu höheren Programmiersprachen klein.
MySQL hält sich zum weitaus größten Teil an die Konventionen von SQL. Wer also mit SQL aus anderen Datenbanksystemen vertraut ist, kann dieses Wissen fast immer auch in MySQL anwenden. Es gibt nur weniges aus dem Standard-SQL, das in MySQL nicht funktioniert. Andererseits hat MySQL einige Erweiterungen, die das Standard-SQL nicht kennt (z.B. der
REPLACE
-Befehl).
Groß- und Kleinschreibung in SQL und mySQL
Grundsätzlich ist es egal, ob man die Befehle groß oder klein schreibt. Auch die Namen von Tabellen und Feldern man beliebig klein oder groß schreiben. Wenn man den BefehlSELECT Bezeichnung FROM Artikel;
also so schreibt:select bezeichnung from artikel;
ist das Ergebnis identisch.In MySQL ist das auch bei Inhalt von Textfeldern so:
SELECT * FROM Artikel WHERE Bezeichnung = 'Faserino';
wird in unseren Beispiel einen Datensatz anzeigen, genauso wieSELECT * FROM Artikel WHERE Bezeichnung = 'faserino';
Wenn man Standard-SQL-konform bleiben will sollte man aber beachten, dass manche Versionen case-sensitiv sind (Groß- und Kleinschreibung unterscheiden).Bei Datenbanknamen unterscheidet Unix auch nach Groß- und Kleinschreibung.
In vielen Bereichen hat es sich eingebürgert, die Schlüsselwörter groß zu schreiben, um sie von den Eigennamen der Tabellen und Felder zu unterscheiden. Das ist aber nur eine optische Frage, um nicht zu sagen eine "kosmetische". SQL kümmert sich nicht darum. Wir halten uns in diesem Dokument daran, wegen der besseren Lesbarkeit.
Datentypen und deren Verwendung
Die Felder in Tabellen einer Datenbank haben immer einen bestimmten Datentyp. Beim Anlegen eines neuen Feldes ist als Standard-Datentyp varchar voreingestellt, das bedeutet Text. Im einfachsten Fall muss man dann nur noch die Länge eintragen, das heißt, wie viel Zeichen dieses Feld aufnehmen kann.Für viele Anwendungsfälle reicht das aus, in einigen Fällen ist es sinnvoller, andere Datentypen zu verwenden, z.B. integer für Zahlen oder date für Datumsangaben. Datentypen spielen auch bei den Befehlen eine Rolle: Zahlenfelder können anders behandelt werden als Textfelder. Grundsätzlich unterscheiden wir in numerische (Zahlen) einerseits, Zeichenketten- und Objekt-Datentypen andererseits. Eine Sonderform sind Datumsfelder. Ihre Werte werden intern als Zahlen gespeichert, aber als Datum bzw. Zeit angezeigt.
Nummerische Datentypen
Numerische Datentypen sind:TYNIINT | Ganzzahlen für Werte von -128 bis 127 |
TINIINT UNSIGNED | Ganzzahlen für Werte von 0 bis 255 |
SMALLINT | Ganzzahlen für Werte von -32768 bis 32767 |
SMALLINT UNSIGNED | Ganzzahlen für Werte von 0 bis 65535 |
MEDIUMINT | Ganzzahlen für Werte von ca. -8 Mio. bis ca. 8 Mio. |
MEDIUMINT UNSIGNED | Ganzzahlen für Werte von 0 bis ca. 16 Mio |
INT oder INTEGER | Ganzzahlen für Werte von ca. -2 Mrd. bis 2 Mrd. |
INT UNSIGNED | Ganzzahlen für Werte von 0 bis ca. 4 Mrd. |
BIGINT | Ganzzahlen für Werte von ca. -9*1018 bis ca. 9*1018 |
BIGINT UNSIGNED | Ganzzahlen für Werte von 0 bis ca. 18*1018 |
FLOAT(N) | Fliesskommazahl mit einfacher Genauigkeit. Wenn N < 25, Wertebereich von ca. -3*1038 bis ca. 3*1038, sonst ist FLOAT wie DOUBLE. |
FLOAT(M,D) oder DOUBLE(M,D) | Fliesskommazahl mit einfacher Genauigkeit, M Stellen insgesamt, davon D Dezimalstellen speicherbar. Exakt sind 7 Stellen, der Rest ist zufällig. |
DOUBLE oder DOUBLE PRECISION oder REAL | Fliesskommazahl mit doppelter Genauigkeit von ca. -2*10308 bis ca. 2*10308. Gespeichert werden können 308 Stellen, exakt sind aber nur 15 Stellen, der Rest ist zufällig. |
DECIMAL(M,D) oder NUMERIC | Gepackte Fliesskommazahl mit M Stellen, davon D Dezimalstellen. |
Zeichenketten-Datentyen
Die Zeichenketten-Datentypen sind:CHAR(M) | Zeichenkette mit fester Länge M Zeichen. M < 256 |
VACHAR(M) | Zeichenkette mit variabler Länge, maximal M Zeichen. M < 256 |
TINYTEXT oder TINYBLOB | Zeichenkette oder BLOB, Länge max. 255 Zeichen |
TEXT oder BLOB | Zeichenkette oder BLOB, Länge max. 65535 Zeichen |
MEDIUMTEXT oder MEDIUMBLOB | Zeichenkette oder BLOB, Länge max. ca. 16 Mio. Zeichen |
LONGTEXT oder LONGBLOB | Zeichenkette oder BLOB, Länge max. ca. 4 Mrd. Zeichen |
ENUM('wert1', 'wert2',...) | Aufzählung von max. 65535 Werten |
SET('wert1', 'wert2',...) | Menge von max. 64 Elementen |
Datums- und Zeittypen
Datentypen für Datum und Zeit sind:DATE | Datum zwischen 01.01.1000 und 31.12.9999 im Format YYYY-MM-DD |
TIME | Uhrzeit zwischen -838:59:59 und 838:59:59 im Format HHH:MM:SS |
DATETIME | Datum und Uhrzeit, Kombination aus DATE und TIME. Format YYYY-MM-DD HH:MM:SS. Die Uhrzeit muss einen gültigen Wert haben. |
YEAR | Jahr von 1901 bis 2155 im Format YYYY. |
TIMESTAMP | Aktuelle Unix-Zeit beim Speichern. Anzahl der Sekunden seit dem 01.01.1970. Format YYYYMMDDHHMMSS. Ein Timestamp-Feld wird automatisch mit der aktuellen Zeit gefüllt, sobald ein Datensatz geändert wird. Es lässt sich aber manuell überschreiben. |
Verwendung von Datentypen
Auf den ersten Blick ist man geneigt, alles was Ziffern enthält, den numerischen Datentypen zuzuordnen und alles was Buchstaben enthält, zu Textfeldern. Das birgt allerdings Gefahren. In der Praxis hat sich die folgende Faustregel bewährt:Alles, was man (sinnvoll) berechnen (z.B. addieren) kann, ist als numerischer Datentyp zu verwalten.
Alles andere sind Textfelder.
Beispiel: Postleitzahlen. Sie enthalten nur Ziffern und verleiten dazu, sie in einem numerischen Feld zu speichern. Wenden wir unsere Regel an: Ist es sinnvoll, Postleitzahlen zu addieren? Sicher nicht! Also Textfeld. Warum? Manche Postleitzahlen beginnen mit 0. Bei der Anzeige wird die 0 weggelassen. Das bringt unnötige Verwirrung. Natürlich kann man die Vornull anzeigen lassen. Dazu gibt es Funktionen, die die Zahl erst in ein Textformat umwandeln und dann eine 0 links anhängen. Einfacher ist es, die PLZ gleich in einem Textfeld zu speichern.
Operanden / Operatoren
Mehrfach wird der Begriff Operand bzw. Operator verwendet. Das ist das gleiche. Operanden sind Zeichen bzw. Schlüsselwörter in einerWHERE
-Klausel, die entweder den Vergleich beschreiben (=, >) oder mehrere Bedingungen verbinden (AND, OR). Zu den wichtigsten gehören folgende:
=, <, >, <=, >=, <>, (!=) | Vergleichsoperatoren: gleich, kleiner als, größer als, kleiner oder gleich, größer oder gleich, ungleich (2 Variante: ungleich) |
Wert IS NULL Wert IS NOT NULL | Trifft zu, wenn ein Feld leer ist (kann in der where-Klausel verwendet werden, um alle die auszuwählen, die im angegebenen Feld keinen Eintrag haben) Trifft zu, wenn ein Feld nicht leer ist (kann in der where-Klausel verwendet werden, um alle die auszuwählen, die im angegebenen Feld irgendeinen beliebigen Eintrag haben) |
Wert BETWEEN Wert1 AND Wert2 | Liegt Wert zwischen Wert1 und Wert2 |
Wert IN (Wert1, Wert2, ...) | Ist Wert gleich einer der in Klammern angegebenen Werte? |
Wert LIKE 'Wert1%' Wert LIKE '%Wert1' Wert LIKE '%Wert1%' | Nur auf Textfelde anwendbar: Beginnt der Wert mit der Zeichenfolge Wert1? Beginnt der Wert mit der Zeichenfolge Wert1? Ist die Zeichenfolge 'Wert1' irgendwo innerhalb von Wert enthalten? |
AND (&&), OR (||), NOT (!) | Logische Operanden (z.B. zum Verbinden mehrerer Bedingungen: und, oder, nicht (die Zeichen in Klammern sind jeweils die 2.Varianten |
+, -, *, /, % | Mathematische Operanden: Addition, Subtraktion, Multiplikation, Division, Modulus |
&, |, - | Bitweises AND, OR, NOT |
<<, >> | Bitverschiebung nach links, rechts |
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Weiterlesen: ⯈ Daten bearbeiten
Über uns

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project