Kontakt aufnehmen

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 Befehl

SELECT 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 wie

SELECT * 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:

TYNIINTGanzzahlen 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.
Wenn man versucht, in ein Zahlenfeld einen Wert außerhalb des oben beschriebenen Bereiches zu speichern, wird der Wert automatisch auf den nächstmöglichen Wert geändert (also auf den größten oder kleinsten Wert des Wertebereichs). Außerdem wird das Dezimalkomma in SQL-Anweisungen immer zum Punkt geschrieben (also statt 0,5 eben dann 0.5).

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 einer WHERE-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

Stefan Wienströer

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

Cookie-Einstellungen

Helfen Sie dabei, uns noch besser zu machen. Wir nutzen Cookies und ähnliche Technologien, um die Website auf Ihre Bedürfnisse anzupassen. Zur Datenschutzerklärung

Auswahl speichern