MySQL-Tutorial für Anfänger
Eine MySQL-Datenbank ist eine einfache aber auch sehr vielseitige Möglichkeit, um Daten praktisch und ohne viel Aufwand zu speichern und abzurufen. Auch PHP, die Serverskriptsprache für serverseitige Webprogrammierung schlecht hin, bietet eine Anbindung an MySQL-Datenbanken an.
Grundlegendes zu Datenbanken und MySQL
Eine MySQL-Datenbank bzw. der Datenbankserver läuft i. d. R. auf dem Webserver selbst, kann aber auch auf einem externen zweiten Server liegen. Ob Sie überhaupt MySQL-Datenbanken verfügbar haben, hängt von Ihrem Hostinganbieter bzw. von Ihrem Paket Ihres Anbieters ab. Je nach Umfang kann es aber auch sein, dass Sie mehrere Datenbanken brauchen. Einige Anbieter bieten in verschiedenen Preisklassen mehr Datenbanken zur Verfügung. Der MySQL-Server ist üblicherweise auf dem Port 3306 erreichbar. Auch die kostenlose Entwicklungsumgebung XAMPP enthält einen MySQL-Server. Hier sind die Anzahl der Datenbanken unbegrenzt. Eine Datenbank kann immer mehrere Tabellen enthalten. In einer Tabelle sind dann eben die Daten im Tabellenformat gespeichert (ein Wert pro Spalte und ein Datensatz pro Zeile).
phpMyAdmin
Die Datenbank selbst wird oft vom Provider angelegt und kann auch vom Namen nicht verändert werden. Bei XAMPP haben Sie natürlich die volle Administrationsrechte und können bzw. müssen die Datenbanken manuell erstellen. Normalerweise wird hierfür ein Datenbanktool wie phpMyAdmin benutzt, mit welchem die Datenbank- und Tabellenstruktur erstellt werden kann. Auch für das manuelle Befüllen der Tabelle kann das Tool benutzt werden. Um Daten auszulesen, zu ändern oder hinzuzufügen, wird dann wiederrum normalerweise ein PHP-Skript benutzt.
Übrigens: phpMyAdmin ist nichts anderes als ein Web-Tool, welches in PHP programmiert wurde. Das Tool kann auf der sourceforge-Website kostenlos heruntergeladen werden. Bei einigen Anbietern läuft der MySQL-Server auf einem separaten Server, weshalb das phpMyAdmin-Tool auf diesem Server meist schon vorinstalliert ist.
phpMyAdmin ist auf den ersten Blick vielleicht etwas unübersichtlich, doch wenn man sich mit der Oberfläche etwas auseinandersetzt, dann ist das Tool einfach nur noch eine große Erleichterung für den Entwickler. Wenn wir eine Tabelle erstellen, dann definieren wir mehrere Spalten. Für jede Spalte werden in phpMyAdmin viele Optionen angezeigt, welche konfiguriert werden können. Diese Optionen werden sowohl beim Erstellen einer Tabelle als auch beim Ändern der Struktur einer Tabelle angezeigt. Der Spaltenname muss eindeutig sein, sollte nicht zu lang sein und am besten keine Sonderzeichen enthalten. Beim Typ können wir auswählen, welche Art von Daten wir in der Spalte speichern wollen. Für Zahlen verwenden wir meistens INT
oder für Gleitkommazahlen FLOAT
oder DOUBLE
. Für einen Text wird meistens TEXT
verwendet. Wenn der Text jedoch begrenzt ist und kleiner als 255 Zeichen lang ist (z. B. für den Namen einer Person), dann sollte auf den sparsamen Typ VARCHAR
zurückgegriffen werden. Oft möchte man auch eine Datum oder eine Uhrzeit speichern, dafür gibt es die Typen TIMESTAMP
, DATE
, TIME
und DATETIME
. Bei der Länge muss nicht zwingend etwas angegeben werden, hier kann nur die Stellenanzahl zusätzlich begrenzt werden (z. B. der Name vom Typ VARCHAR
, kann auf 100 Zeichen begrenzt werden). Bei Kollation kann die Kodierung für TEXT
und VARHCHAR
gewählt werden, wird dieses Feld nicht ausgefüllt so wird die Kodierung der Tabelle bzw. der Datenbank verwendet. Jede Tabelle muss einen sogenannten Primärschlüssel erhalten (manche kennen dies bereits aus Microsoft Access). Hierfür wird meistens eine Spalte vom Typ INT
mit der Bezeichnung ID
verwendet. Der Wert der Spalte soll im Regefall eine Nummer sein, die automatisch hochgezählt werden soll. Daher muss die Eigenschaft AUTO_INCREMENT
(kurz A_I) gewählt werden. Um eine Spalte als Primärschlüssel festzulegen, müssen Sie bei „Index“ PRIMARY
auswählen.
SQL-Befehle
Um später mit PHP den Datenbankzugriff zu steuern, müssen wir erst noch eine kleine "Sprache" lernen: SQL. SQL (Structured Query Language) ist die standardisierte Datenbanksprache für den Datenbankzugriff. Gehen wir zunächst auf einige Schlüsselwörter ein:
SELECT: Damit wird ein bestimmter Wert, eine Spalte oder auch die ganze Tabelle ausgewählt. Folgt als Wert ein Sternzeichen *
, dann werden alle Spalten der Tabelle ausgewählt. Folgt stattdessen ein oder mehrere Spaltennamen, dann werde nur diese Spalten ausgewählt.
FROM: Der Befehl wird bei fast allen SQL-Befehlen benötigt, da er benötigt wird, um die zu verwendende Tabelle anzugeben.
WHERE: Damit kann eine Abfrage gefiltert werden. Hinter dem WHERE
-Schlüsselwort werden dazu z. B. ein Spaltenname, ein Gleichheitszeichen und ein Wert angegeben. Somit kann z. B. auch nur ein Datensatz ausgewählt werden. Der Filter kann mit mehreren Bedingungen verknüpft werden, hierzu dienen AND
(und), OR
(oder) und XOR
(exklusiv oder).
ORDER BY: Damit können beim Auslesen mehrerer Datensätze, die Datensätze nach dem Wert einer bestimmten Spalte sortiert werden. Der Spaltenname wird hinter den Schlüsselwörtern notiert. Der Spaltenname kann mit ASC
(aufsteigend, Standard) oder DESC
(absteigend) erweitert werden.
INSERT INTO: Damit kann ein kompletter Datensatz in die Tabelle hinzugefügt werden. Hinter den Schlüsselwörtern wird der Tabellenname notiert, gefolgt von optionalen runden Klammern. Innerhalb der runden Klammern werden die Spaltennamen aufgelistet. Normalerweise ist die Notation mit den Klammern erforderlich, da wir die ID-Spalte nicht mit einem Wert befüllen wollen, da für die Spalte die Eigenschaft AUTO_INCREMENT
gesetzt ist.
VALUES: Dieses Schlüsselwort wird zusammen mit INSERT INTO
verwendet. Hierbei wird hinter den Klammern nach dem Tabellennamen, das Schlüsselwort VALUES
notiert. Hinter diesem Schlüsselwert kommt wieder ein rundes Klammernpaar. Diesmal werden jedoch die Werte für den neuen Datensatz angegeben (Werte, abgesehen von Zahlen, müssen in einfachen Anführungszeichen notiert werden) und zwar in der gleichen Reihenfolge, wie die Spalten beim Klammernpaar hinter dem Tabellennamen verwendet wurden.
UPDATE: Mit UPDATE
kann der Wert einer oder mehrere Spalte(n) eines vorhandenen Datensatzes geändert werden. Hinter dem Schlüsselwort wird der Tabellenname notiert.
SET: Dieses Schlüsselwort wird hinter dem Tabellenname in Kombination mit dem UPDATE
-Befehl verwendet, um einen Spaltenwert zu aktualisieren. Hinter dem SET
-Schlüsselwort werden die Spaltenname mit dem neuen Wert (getrennt durch ein Gleichheitszeichen) notiert. Meistens wird UPDATE
und SET
mit WHERE
kombiniert, um nur einen bestimmten Datensatz zu ändern.
COUNT: Mit COUNT
kann die Anzahl der Datensätze gezählt werden. COUNT
wird mit runden Klammern (wie bei einer Funktion) verwendet, in der der Spaltenname notiert wird. Meistens wird das Sternzeichen verwendet, da eine Zelle ohne Wert nicht gezählt werden würde.
Für die nachfolgenden Beispiele verwenden wir wieder die vorher mit phpMyAdmin erstellte Tabelle.
Gibt alle Datensätze mit allen Spalten aus:
SELECT * FROM tutorial
Gibt die Werte der Spalten Vorname und Nachname aller Datensätze aus.
SELECT Vorname,Nachname FROM tutorial
Gibt die Werte der Spalten Vorname und Nachname aus, wenn das Gehalt größer als 2500 ist.
SELECT Vorname,Nachname FROM tutorial WHERE Gehalt > 2500
Gibt alle Datensätze mit allen Spalten aus, geordnet nach dem Gehalt (absteigend).
SELECT * FROM tutorial ORDER BY Gehalt DESC
Fügt der Tabelle einen neuen Datensatz hinzu.
INSERT INTO tutorial(Vorname,Nachname,Gehalt) VALUES('Max', 'Mustermman', 3000)
Aktualisiert das Gehalt bei allen Datensätzen, bei denen der Vorname „Max“ und der Nachname „Mustermann“ ist.
UPDATE tutorial SET Gehalt=4000 WHERE Vorname='Max' AND Nachname='Mustermann'
Gibt die Anzahl der Datensätze in der Tabelle zurück.
SELECT COUNT(*) FROM tutorial
Übrigens: Sie finden auf unserer Website auch einen SQL-Crashkurs.
PHP und MySQL
Nachdem Sie nun die SQL-Befehle kennen, können wir mit der Datenbankanbindung über PHP beginnen (Grundkenntnisse in PHP sollten dazu vorhanden sein). Als erstes müssen wir eine Verbindung zum Server herstellen. Dazu nutzen wir die Funktion mysql_connect()
. Der Funktion werden 3 Argumente übergeben. Der 1. Parameter gibt den Server an. Bei XAMPP ist dies localhost
. Wie bereits erwähnt, ist bei einigen Anbietern der MySQL-Server nicht im gleichen Server wie der Webserver. Ist dies der Fall, dann kann die Angabe localhost
nicht korrekt sein. Erkundigen Sie sich hierzu bei Ihrem Anbieter. Der 2. Parameter ist der Benutzername und der 3. Parameter ist das Passwort. Unter XAMPP wird standardmäßig der Benutzer root
und ein leeres Passwort verwendet.
mysql_connect("localhost", "root", "");
Als nächstes muss die Datenbank ausgewählt werden. Dazu dient die Funktion mysql_select_db()
, welcher als Argument der Datenbankname übergeben wird.
mysql_select_db("test");
Um in MySQL eine Datenbankanfrage auszuführen, benötigen wir ein MySQL-Query. Dazu gibt es die PHP-Funktion mysql_query()
. Als Parameter wird der SQL-Befehl übergeben. Wenn wir Werte ändern oder hinzufügen wollen, können wir diese Funktion ebenfalls werden. Als Rückgabewert erhalten wir im Fehlerfall false
(Prüfung mit ===
erforderlich). Hier ein Beispiel zum hinzuzufügen eines Datensatzes.
mysql_query("INSET INTO tutorial(Vorname,Nachname,Gehalt) VALUES('Max', 'Mustermann', 3000)");
Wollen wir dagegen einen Datensatz aus der Datenbank auslesen, benötigen wir zwar ebenfalls die mysql_query()
-Funktion, jedoch benötigen wir noch eine zweite Funktion, um die Werte auszulesen. Mit der Funktion mysql_fetch_row()
erhalten wir einen Datensatz als nummerisches Array. Haben wir mehrere Datensätze, so müssen wir die Funktion mehrmals aufrufen. Gibt die Funktion false
zurück so gibt es keine weiteren Datensätze. Mit den folgenden Zeilen rufen wir den Namen der Person mit der ID 1 ab und geben diesen aus.
$query = mysql_query("SELECT Vorname,Nachname FROM tutorial WHERE ID=1"); $data = mysql_fetch_row($query); echo "ID 1 gehört zu \\"".$data[0]." ".$data[1]."\\"";
Wollen wir mehrere Datensätze auslesen so müssen wir, wie bereits oben erwähnt, die Funktion mysql_fetch_row()
mehrmals aufrufen. Hierfür eignet sich eine while
-Schleife.
$query = mysql_query("SELECT Vorname,Nachname,Gehalt FROM tutorial"); while (($data = mysql_fetch_row($query)) !== false) { echo $data[0]." ".$data[1]." hat ein Gehalt von ".$data[2]; }
Nun kennen Sie die grundlegendsten MySQL-Befehle, mit welchen Sie nun schon einiges auf die Beine stellen können. Wenn Sie noch weitere Befehle kennenlernen wollen, dann können Sie sich auf der PHP-Website mal etwas durchklicken.
Wichtig: Seit PHP 5.5 wurden alle Funktion beginnend mit mysql_
als deprecated (zu Deutsch veraltet) gekennzeichnet. In zukünftigen Versionen werden diese Funktionen komplett entfernt. Alle MySQL-Funktionen in PHP sind in der sogenannten MySQL-API enthalten. Seit einiger Zeit gibt es die verbesserte Version "MySQL Improved API". Um diese zu nutzen, müssen alle MySQL-Befehle nicht mehr mit mysql_
beginnen, sondern mit mysqli_
(z. B. mysqli_select_db()
statt mysql_select_db()
). Eine weitere gute Alternative wäre die Verwendung der PDO-API, welche wir im PHP-Tutorial erklärt haben.