Erste Schritte mit phpMyAdmin
MySQL und MariaDB sind zwei der am häufigsten eingesetzten Datenbankmanagementsysteme und ihre Beliebtheit ist zumindest teilweise darin begründet, dass sie mit phpMyAdmin über eine benutzerfreundliche webbasierte Anwendung zur Verwaltung ihrer Datenbanken verfügen. Das vorliegende phpMyAdmin-Tutorial gibt eine kompakte Übersicht über die Verwendung von phpMyAdmin zur Erstellung, Verwaltung und Abfrage von MySQL- bzw. MariaDB-Datenbanken. Wir verwenden dabei das XAMPP-Programmpaket, das MySQL/MariaDB und phpMyAdmin beinhaltet, und zeigen, wie die Struktur einer Datenbank (Tabellen, Integritätseinschränkungen, Sichten) mit der Benutzeroberfläche erstellt wird, wie die Datenbank über die Benutzeroberfläche und mit der Import-Funktionalität mit Daten befüllt wird, und wie Datenbank-Struktur und Inhalte mit der Export-Funktionalität exportiert werden. Die Beispiele beziehen sich auf eine University-Datenbank, die die Daten über Studiengänge, Module, Studenten und Prüfungen in einer Universitätsumgebung verwaltet, und die als Datenhaltungsschicht für eine Webanwendung verwendet werden soll.
Motivation
MySQL und MariaDB-Datenbanken werden häufig für die persistente Datenhaltung in webbasierten Anwendungen eingesetzt, man findet sie im Backend der meisten Webseiten. Für das Datenbankmanagement von MySQL bzw. MariaDB stehen zwei Tools zur Verfügung: phpMyAdmin als webbasierte Benutzeroberfläche und MySQL Workbench als Desktopanwendung. phpMyAdmin bildet alle Aufgaben der Datenbankverwaltung ab, man kann damit die Datenbanken (Tabellen, Views, Fremdschlüssel, Indizes) erstellen, Benutzerrechte verwalten, Daten importieren und exportieren etc. Beide Datenbankmanagementsysteme können weiterhin auch über die Kommandozeile verwaltet werden, dies ist eher für den fortgeschrittenen Einsatz und für DBMS-Admins wichtig.
Übersicht
Das Tutorial ist in fünf Abschnitte gegliedert, die die Installation der benötigten Datenbankmanagementsysteme, den Aufbau des phpMyAdmin, die Erstellung einer Datenbank mit Hilfe von phpMyAdmin, und die Verwendung der MySQL-Konsole erläutern.
1 MySQL und MariaDB
Top |
MySQL ist ein OpenSource-DBMS, das vor allem bei Webapplikationen als Backend eingesetzt wird. MariaDB ist 2009 als eine Abspaltung aus MySQL entstanden und wird in Open-Source-Projekten als Ersatz für MySQL eingesetzt. Die Unterschiede zwischen den beiden DBMS beziehen sich vor allem auf die Lizenzierung (MySQL wird von Oracle verwaltet und einige Features sind in der kostenlosen Version nicht enthalten) und auf tiefere technische Details, die für Einsteiger und auch für den Einsatz in kleineren Projekten nicht ins Gewicht fallen. Da MySQL und MariaDB sich in der Kernfunktionalität nicht wesentlich unterscheiden, wird bei der Benennung oft MySQL verwendet, auch wenn MariaDB gemeint ist. Die wichtigsten Programme sind bei beiden DBMS gleich, z.B. heißt das zentrale Programm, der Datenbankserver, bei beiden mysqld.
2 Vorbereitung: DBMS installieren
Top |
Die Datenbankmanagementsysteme MySQL und MariaDB können von ihren jeweiligen Webseiten als dedizierte DBMS heruntergeladen und installiert werden. Der Vorteil dabei ist, dass man die DBMS dort direkt vom Hersteller bezieht und mit derselben Umgebung die Datenbank sowohl entwickeln kann, als auch im Produktivbetrieb einsetzen. Eine gute Alternative für die Entwicklungsphase ist das Programmpaket XAMPP von Apache Friends. XAMPP ist eine Zusammenstellung von Programmen und Sprachen für die Webentwicklung mit PHP und enthält neben dem Apache Webserver auch MariaDB, PHP, Tomcat und andere Komponenten.
Die bei der Installation durchzuführenden Schritte sind wie folgt:
- 1. Passende XAMPP-Version herunterladen: Wir verwenden für Lern- und Testzwecke XAMPP für Windows, die gewünschte Version kann auf der Webseite apachefriends.org heruntergeladen werden. Für die Installation kann jede der letzten Versionen genommen werden.
- 2. XAMPP installieren: Installation sollte im Ordner C:\XAMPP erfolgen, mit Admin-Rechten.
- 3. Installation überprüfen: Zunächst Webserver und MySQL im XAMPP Control Panel starten, dann Dashboard aufrufen mit https://localhost.
- 4. Optional: Sicherheitseinstellungen vornehmen: Hier kann noch ein Passwort für MySQL und phpMyAdmin eingerichtet werden, und eingestellt werden, dass der Zugriff nur vom lokalen PC aus möglich ist.
XAMPP Installation
XAMPP sollte am besten im Default-Ordner C:\XAMPP installiert werden. Es ist empfehlenswert, die Installation als Administrator auszuführen und bei der Installation nur die benötigten Komponenten auszuwählen, hier: Apache Webserver, MySQL, PHP und phpMyAdmin, die Installation selber dauert weniger als 10 Minuten.
Nach Installation des XAMPP-Programmpaketes öffnet sich das XAMPP Control Panel und der Apache Webserver (httpd.exe) wird erstmalig gestartet, dabei muss der Port 80 durch die Windows Firewall freigegeben werden. Das XAMPP Control Panel (xampp-control.exe) ist die "Schaltzentrale" des XAMPP und stellt eine minimale Benutzeroberfläche dar, um die zugehörigen Programme der Installation zu starten, zu stoppen und zu konfigurieren.
XAMPP Control Panel
Zu jedem Modul gibt es die Schaltflächen Start/Stop (zum Starten und Stoppen des Moduls), Admin (Link zur Admin-Oberfläche des Moduls), Config (Link zur Konfigurationsdatei des Moduls) und Logs (Link zu den Logdateien). Die Schaltfläche "Admin" des Apache Webservers öffnet das XAMPP Dashboard, d.h. die Seite localhost/dashboard/ im Browser. Die Schaltfläche "Admin" in der MySQL-Zeile öffnet phpMyAdmin, d.h. die Seite localhost/phpmyadmin/ im Browser.
Nachdem der Webserver gestartet wurde, kann durch Anklicken der Schaltfläche Apache > Admin das XAMPP-Dashboard geöffnet werden, dies geht auch direkt durch Eingabe der Adresse https://localhost im Webbrowser.
3 Aufbau des phpMyAdmin
Top |
Die Benutzeroberfläche des phpMyAdmin ist in zwei Bereiche gegliedert, Navigationsbereich (links) und Hauptpanel (rechts). Der Navigationsbereich zeigt entweder alle vorhandenen Datenbanken an, oder, falls eine Datenbank ausgewählt wurde, die Tabellen und Ansichten der ausgewählten Datenbank. Einige der Datenbanken sind Systemdatenbanken, z.B. hat phpMyAdmin selbst eine Datenbank gleichen Namens als Backend. Die anderen Datenbanken sind die selbst erstellten benutzerdefinierten Datenbanken.
Das Hauptpanel enthält oben die Menüleiste, die die Funktionalität für die Datenbankverwaltung abbildet. Die Tabs der Menüleiste sind kontextabhängig. Falls keine bestimmte Datenbank ausgewählt ist, enthält die Menüleiste Tabs, die auf Serverebene greifen, z.B. Datenbanken, SQL, Status, Benutzerkonten, Exportieren, Importieren. Falls eine bestimmte Datenbank ausgewählt ist, enthält die Menüleiste Tabs, die auf Datenbankebene greifen, insbesondere Struktur, SQL, Suche, Abfrage, Exportieren, Importieren, Rechte.
Die am häufigsten benötigte Funktionalität befindet sich links in den ersten Tabs:
- Datenbanken: Im Datenbanken-Tab werden Datenbanken erstellt und verwaltet.
- Struktur: Im Struktur-Tab werden die Tabellen der ausgewählten Datenbank erstellt und verwaltet. Dies Tab wird sichtbar, sobald man eine Datenbank ausgewählt hat.
- SQL: Das SQL-Tab enthält die SQL-Abfragebox, wo SQL-Befehle eingegeben werden können.
- Status: Im Status-Tab werden Informationen zum Status des Datenbankservers angezeigt, Auslastung, wie viele Prozesse laufen, etc.
- Benutzerkonten: Im Benutzerkonten-Tab werden die Benutzer des DBMS verwaltet.
- Exportieren und Importieren: In diesen beiden Tabs ist die Funktionalität gebündelt, um Datenbanken und Daten exportieren und importieren zu können.
1. phpMyAdmin Startseite
Einstellungen und Server-Infos
2. Datenbanken-Übersicht
Datenbanken anlegen und verwalten
3 Datenbank-Struktur
Tabellen einer Datenbank anlegen, ändern, befüllen
4 SQL-Box
SQL-Abfragen ausführen
4 University-Datenbank mit phpMyAdmin anlegen
Top |
Beim Anlegen einer Datenbank sollte die Struktur vorab erarbeitet und in einem Entity-Relationship-Diagramm angebildet werden, d.h. die Tabellen mit Anzahl und Art der Spalten, die Beziehungen zwischen den Tabellen, sowie die Integritätseinschränkungen (welches sind die Primärschlüssel, welche Spalten dürfen NULL-Werte enthalten, welche Spalten müssen eindeutige Werte enthalten, etc.). Diese Entwurfsphase ist für den Aufbau einer jeden größeren Datenbank wichtig und sichert die Konsistenz der gespeicherten Daten. Spätere Änderungen sind möglich, jedoch umständlich, vor allem sind Änderungen schwierig, nachdem schon erste Datensätze eingefügt wurden.
Im folgenden erstellen wir die Datenbank "University" mit Hilfe der phpMyAdmin-Benutzeroberfläche. Die Datenbank "University" soll die Daten über Studenten und Vorlesungen in einer Universitätsumgebung verwalten, hier wurde ein vereinfachtes Modell erstellt. Bekannt: Studiengänge haben einen Namen und eine Studiengangs-Art, die dem Abschluss entspricht (Master / Bachelor). Ein Student hat die Attribute Name, Vorname, Matrikelnummer, Semester und ist in genau einen Studiengang eingeschrieben. Ein Modul hat die Attribute Name, Semester, CP, SWS und ist einem Studiengang zugeordnet, kann aber auch in anderen Studiengängen verwendet werden.
Datenbank "University"
Die Datenbank enthält vier Tabellen, die Objekten bzw. Entitäten entsprechen: Studiengang, Modul, Student und Prüfung, und zwei Tabellen, die Relationen zwischen den Entitäten entsprechen: Modul2Studiengang und Student2Prüfung. Jede Tabelle hat eine Spalte ID, die den eindeutigen Primärschlüssel der Datensätze speichert. Über diesen Primärschlüssel kann ein Datensatz von anderen Tabellen aus referenziert werden. Die Fremdschlüssel-Spalten einer Tabelle erkennt man an der Endung ID, d.h. die Spalte StudiengangID in der Tabelle Student ist ein Fremdschlüssel, der auf die Tabelle Studiengang verweist, und um den Studiengang des Studenten mit StudiengangID 1 herauszufinden, wird die Zeile mit der ID 1 in der Tabelle Studiengang abgefragt.
Entity-Relationship-Diagramm
Der aktuelle Datenbankinhalt ("Snapshot") besteht aus vier Studiengängen, fünf Studenten, vier Modulen, fünf Prüfungen und den entsprechenden Zuordnungen, die über Fremdschlüsselbeziehungen abgebildet werden.
Die Note eines Studenten in einer Prüfung wird in der Tabelle Student2Prüfung gespeichert. Der Eintrag <1, 3, 1.7 > in dieser Tabelle bedeutet, dass der Student mit ID 1 in der Prüfung mit ID 3 die Note 1.7 erzielt hat.
4-1 Struktur der Datenbank anlegen
Beim Anlegen der Datenbank university mit phpMyAdmin sind einige Besonderheiten zu beachten. Zunächst erlaubt MySQL defaultmäßig nur Kleinschreibung bei Tabellennamen. Dies kann über eine Konfigurationseinstellung geändert werden, wir werden jedoch zunächst beim Standard bleiben und Kleinschreibung bei den Tabellennamen verwenden. Die Tabellen sollten in der Reihenfolge studiengang, student, modul, modul2studiengang, pruefung, student2pruefung angelegt werden, nämlich zuerst diejenigen Tabellen, die nicht über Fremdschlüssel von anderen Tabellen abhängen. Als Primärschlüssel wird für jede Tabelle die Spalte ID verwendet, die wir auch mit einem Auto-Increment versehen, d.h. bei Anlegen neuer Datensätze wird der Zähler automatisch vergeben.
Schritt 1. Datenbank anlegen
Datenbankname und Kollation festlegen
Beim Anlegen einer neuen Datenbank muss die Kollation, d.h. der Standardzeichensatz festgelegt werden. Default ist latin1_swedish_ci, dies sollte abgeändert werden in utf8_general_ci oder ähnlich, damit auch deutsche Umlaute korrekt gespeichert werden.
Schritt 2. Tabelle(n) erzeugen
Tabellenname und Anzahl Spalten festlegen
Die erste Tabelle, die wir erstellen, ist die Tabelle studiengang mit 3 Spalten: ID, Name, Art. Die Datenbank university wird ausgewählt, in der Ansicht "Struktur" erscheint die Eingabebox "Erzeuge Tabelle", hier folgt man der Benutzerführung.
Schritt 3. Spalten der Tabelle(n) spezifizieren
Spaltennamen, Datentyp, Primärschlüssel etc. festlegen
Beim Anlegen einer Spalte muss mindestens der Name und Datentyp angegeben werden. Weiterhin kann festgelegt werden, ob die Spalte ein Primärschlüssel ist (mit / ohne Auto-Increment), ob sie leere Werte enthalten darf (Null ja /nein), ob sie eindeutige Werte enthalten muss (UNIQUE ja/nein), ob sie zu einem Index gehört.
Schritt 4. Struktur der angelegten Tabelle(n) überprüfen
Spalteneigenschaften und Schlüssel
Die Struktur der angelegten Tabelle wird überprüft, indem man in die Ansicht Struktur wechselt. Stimmen Namen, Reihenfolge und Datentypen der Spalten, ist der Primärschlüssel mit Auto-Increment angelegt?
Die Schritte 2, 3, 4 werden für die weiteren Tabellen (modul, student, etc.) wiederholt, die Spalten werden hier entsprechend dem ER-Diagramm angelegt. Nachdem die Tabellenstruktur der Datenbank feststeht, können die Beziehungen zwischen den Tabellen, d.h. die Fremdschlüssel angelegt werden.
Schritt 5. Fremdschlüssel erstellen
Beziehungen zwischen Tabellen festlegen
Der erste Fremdschlüssel, den wir erstellen, bildet die eins-zu-viele Beziehung zwischen Studiengängen und Studenten ab: student.StudiengangID = studiengang.ID. Der Fremdschlüssel wird in der Ansicht Struktur > Beziehungsansicht der Tabelle student erstellt. In der Eingabebox "Beschränkungen durch Fremdschlüssel" wird die Fremdschlüssel-Spalte der Tabelle (hier: StudiengangID) ausgewählt, sowie die externe Tabelle (hier: studiengang) und Spalte (hier: ID), auf die sie sich bezieht. Der Name des Fremdschlüssels wird automatisch erzeugt, man kann jedoch auch einen eigenen Namen eintragen.
Schritt 6. Struktur der Datenbank überprüfen
Designer-Ansicht
Nachdem die Struktur der Tabelle angelegt wurde und alle Tabellen, Schlüssel und Constraints erfasst wurden, kann diese mit Hilfe des Designers überprüft werden, der ein ER-Diagramm der Datenbank erstellt. Die Designer-Ansicht für eine Datenbank wird angezeigt, wenn man die Datenbank auswählt und in der Menüleiste des Hauptpanels Mehr > Designer anklickt.
4-2 Datenbank mit Inhalten befüllen
Nachdem die Struktur der Datenbank feststeht, kann diese mit Daten befüllt werden. Eine Initialbefüllung mit Testdaten ist auch ein guter Test, ob die entworfene Struktur für den angedachten Anwendungsfall passt. Dies kann mit phpMyAdmin manuell erfolgen, indem man jeweils eine Tabelle auswählt, und in der Menüleiste des Hauptpanels den Menüpunkt "Einfügen". Dabei ist die durch Fremdschlüssel vorgegebene Reihenfolge zu beachten: man kann erst Datensätze in die Tabelle "student" einfügen, nachdem zuvor die Datensätze in der Tabelle "studiengang" angelegt wurden. Die manuelle Befüllung mit Testdaten ist ein mühsamer Weg und eignet sich nur für wenige Testdaten.
Das Befüllen mit Testdaten kann mit Hilfe der Export-Funktionalität des phpMyAdmin effizienter gestaltet werden: zunächst fügt man die minimal erforderliche Anzahl an Datensätzen in die Datenbank ein. Danach exportiert man die komplette Datenbank (Struktur und Inhalte) in ein SQL-Skript. Die INSERT-Anweisungen in diesem Skript können um weitere Inhalte erweitert werden, ebenso kann auch die Struktur per SQL-Anweisungen geändert und erweitert werden. Ein weiterer Vorteil bei diesem Vorgehen ist, dass Änderungen nicht direkt an der Originaldatenbank erfolgen, sondern mit Hilfe des Skripts eine Kopie der Datenbank erstellt werden kann.
Im Produktivbetrieb gelangen die Daten zumeist über ein Frontend, z.B. über eine Webanwendung, in die Datenbank.
5 Verwendung der MySQL-Konsole
Top |
Die MySQL-Konsole (mysql.exe) ermöglicht die Datenbankverwaltung über Kommandozeilen-Befehle, insbesondere kann hier der Status des Datenbankservers eingesehen, dies ist besonders Administratoren wichtig. In der XAMPP-Installation befindet sich die MySQL-Konsole in dem Verzeichnis C:\xampp\mysql\bin\.
Datenbank per Konsole bedienen
Verbindung mit dem MySQL-Datenbankserver per Konsole:
Um die MySQL-Konsole zu öffnen, wechselt man in der Eingabeaufforderung (cmd.exe) zunächst in das Verzeichnis C:\xampp\mysql\bin. Im nächsten Schritt ruft man die Konsole mit dem Befehl
mysql -u [username] -p
auf, wobei anstelle von [username] ein zuvor mit phpMyadmin angelegter Benutzername eingetragen sollte. In der Entwicklungsphase kann auch einfach der Benutzername root verwendet werden, der schon vorhanden ist. Die Option -p führt dazu, dass ein Prompt für die Eingabe des Passworts für den Benutzer erscheint. Falls man kein Passwort vergeben hat, das Feld leer lassen, dann kann -p weggelassen werden.
Die Verbindung mit dem DBMS über die MySQL-Konsole kann alternativ erfolgen, indem man direkt eine bestimmte Datenbank oder auch eine auszuführende Query angibt.
Verbindung mit einer bestimmten Datenbank:
mysql -u [username] -p [dbname]
Verbindung mit einer bestimmten Datenbank und Ausführen einer Abfrage:
mysql -u [username] -p [dbname] -e [query]
Nach Ausführung des Befehls mysql -u root ist man mit dem installierten MySQL- oder MariaDB-Server verbunden, dies erkennt man daran, dass als Prompt "MariaDB [(none)]>" angezeigt wird, oder, nachdem eine Datenbank ausgewählt wurde, "MariaDB [(university)]>", und kann weitere SQL-Befehle eingeben.
MySQL-Konsole
SQL-Befehle ausführen
Welche Befehle können über die MySQL-Konsole eingegeben werden? Einerseits einfach SQL-Abfragen, andererseits spezielle MySQL-Befehle für die Datenbankverwaltung: CLONE-Befehle, SET-Befehle und SHOW-Befehle. Zu beachten ist, dass jeder Befehl mit einem Semikolon beendet werden muss. Hier als Beispiel eine Auswahl möglicher Abfragen:
- Datenbank auswählen:
MariaDB [(none)]> USE university;
MariaDB [(university)]> SELECT * FROM studiengang;
MySQL-Konsole
Datenbank auswählen und Abfrage ausführen
Die Verwendung der MySQL-Konsole ist hilfreich, um die Konfiguration und den Status des Servers einzusehen. Wichtige Konfigurationsparameter sind max_connections (maximale Anzahl der gleichzeitig zulässigen Verbindungen) und max_user_connections (maximale Anzahl der gleichzeitig zulässigen Verbindungen für einen Anwender), die man aus Sicherheitsgründen beschränken kann.
Konfiguration der Datenbank anzeigen
Zeige alle Konfigurationsvariablen an, die 'connections' enthalten:
show global variables like '%connections%';
Zeige Anzahl der offenen Datenbankverbindungen:
show status like '%connected%';
Zeige Anzahl der Benutzer mit offenen Datenbankverbindungen:
show processlist;
Datenbank warten und reparieren
Gelegentlich kann es vorkommen, dass Tabellen der Datenbank oder die ganze Datenbank einen inkonsistenten Zustand haben und nicht mehr zugreifbar sind. Bei XAMPP kann dies insbesondere mit der user-Tabelle passieren, in der die Benutzer gespeichert werden. Dann erhält man Fehlermeldungen wie z.B. "#1030 Got error "Read page with wrong checksum" storage engine Aria". Für diesen Fall stehen Wartungstools wie z.B. mysqlcheck zur Verfügung.
mysqlcheck ist ein Befehlszeilen-Wartungstool, mit dem man Tabellen überprüfen und reparieren kann. Man verwendet es bei laufendem Datenbankserver, mit verschiedenen Optionen, die teilweise kombiniert werden können: -r bedeutet: reparieren, -o bedeutet: optimieren, -c bedeutet: auf Fehler überprüfen.
mysqlcheck -u root -p yourpasswd -r --all-databases mysqlcheck -u root -p yourpasswd -o --all-databases mysqlcheck -u root -p yourpasswd -c --all-databases
Tools, Quellen und weiterführende Links
Tools:
- MariaDB: mariadb.org
- MySQL: mysql.com
- XAMPP: apachefriends.org
Quellen und weiterführende Links:
- W3Schools SQL Tutorials: w3schools.com/sql/
- MySQL SQL-Referenz: dev.mysql.com/doc/refman/8.0/en/sql-statements.html
- MariaDB mysqlcheck: mariadb.com/kb/en/mysqlcheck/
- SQL-Quiz: https://www.evamariakiss.de/tutorial/sqlquiz/