21.2 Datenbankserver
Datenbankserver sind existentielle Komponenten jeder modernen Webanwendung. Der am weitesten verbreitete und beliebteste Open-Source-Datenbankserver und ist in der jeweils aktuellen Version in Ubuntu enthalten.
Datenbankserver ermöglichen anderen Anwendungen oder Serverdiensten Zugriff auf Datenbanken. Dies kann bei Bedarf über lokale Netzwerke oder auch über das Internet erfolgen. Unter Ubuntu können Sie problemlos zwei der wichtigsten Open-Source-Datenbankserver nutzen:
- MySQL
MySQL ist ein SQL-Datenbankverwaltungssystem der schwedischen Firma MySQL AB. Da es grundsätzlich kostenlos ist, wird die Weiterentwicklung durch kostenpflichtigen Support und durch kommerzielle Lizenzen ermöglicht. Letztere erlauben beispielsweise die Integration von MySQL in kommerzielle Software.MySQL ist als Open-Source-Software für verschiedene Betriebssysteme verfügbar und bildet die Grundlage vieler Webauftritte. In Verbindung mit dem Apache-Webserver bietet die Verwendung der Datenbank MySQL ein professionelles Webserver-Umfeld. Die gesamte Technik fand man bis vor Kurzem noch unter der Sammelbezeichnung LAMP (Linux-Apache-MySQL-PHP), mittlerweile ist man zur Bezeichnung XAMPP (X-Apache-MySQL-PERL-PHP) übergegangen. Das X soll signalisieren, dass Sie die gleiche Softwarekombination auch unter Windows realisieren können; dort war früher die Bezeichnung WAMP (Windows-Apache-MySQL-PHP) üblich.
- PostgreSQL
PostgreSQL (www.postgresql.org) ist ebenfalls ein relationales Datenbankmanagementsystem, das an der Universität von Kalifornien entstand und seit Ende der 1990er Jahre von einer Open-Source-Community weiterentwickelt wird. PostgreSQL ist weitgehend konform zu den SQL-Standards und glänzt durch zahlreiche optionale Zusatzmodule, mit denen der Benutzer die Datenbanken seinen Bedürfnissen entsprechend anpassen kann.
Aus Platzgründen werde ich mich auf den folgenden Seiten ausschließlich mit MySQL beschäftigen. Die hier erworbenen Kenntnisse können Sie aber relativ problemlos auch auf PostgreSQL anwenden.
Datenbanken sind oft notwendig für das Bereitstellen von Internetseiten. So erfordert sowohl der Betrieb eines Forums als auch der Einsatz von sogenannten Content-Management-Systemen zwingend das Vorhandensein einer Datenbank. Häufig wird für diesen Zweck MySQL eingesetzt.
SQL: Structured Query Language. Eine deklarative Datenbanksprache für relationale Datenbanken. Die Sprache ist standardisiert und wird beispielsweise für die Abfragen der Daten aus den Tabellen verwendet (siehe unten). Entwickelt wurde die Sprache in den 1970er Jahren von Edgar F. Codd. Wie fast jedes Datenbanksystem besitzt auch MySQL seinen eigenen SQL-Dialekt mit spezifischen Erweiterungen.
21.2.1 Allgemeines zu MySQL
MySQL stellt eine relationale Datenbank zur Verfügung und verwendet somit ein Tabellenmodell zum Ablegen von Daten, wobei die verschiedenen Informationskategorien in Spalten geordnet sind. Jede Zeile stellt einen Datensatz (englisch record) dar, während die einzelnen Zellen Datenfelder genannt werden. Die Datenfelder sind die kleinsten Informationseinheiten – sie sind atomar – und sollen daher jeweils nur ein Element (englisch entity – »Entität«) spezifizieren. Diese kleine Einschränkung ist substanziell für das Funktionieren einer relativen Datenbank.
Normalisieren
Redundanzen sind unbedingt zu vermeiden. So sollten Sie beispielsweise den Namen eines Kunden unbedingt in die beiden Entitäten Vorname und Name aufteilen. Der Vorgang zur Vermeidung von Inkonsistenzen wird als Normalisierung der Datenbank bezeichnet.
Entität 1 | Entität 2 | |
Datensatz A | ||
Datensatz B |
Relationen
Eine relationale Datenbank besteht schließlich aus beliebig vielen dieser Tabellen, die durch Beziehungen oder Relationen miteinander verknüpft sind. Eine Relation besteht durch die Verwendung von Schlüsseln:
- Primärschlüssel
Der Primärschlüssel des Datensatzes einer Tabelle wird als Wert in ein Feld einer anderen Tabelle eingetragen. Der Primärschlüssel ist hierbei entweder ein spezielles Datenfeld oder eine Kombination von Werten mehrerer Felder. Dabei müssen diese Felder einen einmaligen Wert besitzen und den Datensatz eindeutig kennzeichnen. Dieser Aufbau ist grundlegend dafür, dass die Datenbank konsistent ist. - Fremdschlüssel
Der Primärschlüssel einer Tabelle, auf den in einer anderen Tabelle verwiesen wird, heißt dort Fremdschlüssel.
Es handelt sich bei Relationen grundsätzlich um sogenannte m:n-Relationen. Dabei werden beliebig viele Vorkommen von bestimmten Werten miteinander kombiniert.
1:1 und 1:n: Diese beiden Spezialfälle verknüpfen entweder einen Datensatz einer Tabelle mit genau einem Datensatz (1:1) oder mit beliebig vielen anderen Datensätzen einer anderen Tabelle (1:n).
Beispiel: Webshop
Wir werden diese Theorie anhand eines Beispiels näher erkunden. Versetzen Sie sich hierzu in die Lage eines Webshop-Betreibers. Sie wollen eine relationale Datenbank verwenden, um Ihre Kunden- und Verkaufszahlen zu organisieren. In diesem einfachen Beispiel benutzen wir drei Tabellen:
- Eine Tabelle enthält Daten über die Käufer (siehe Tabelle 21.2),
- eine zweite Informationen über die vorhandenen Artikel (siehe Tabelle 21.3),
- in der dritten schließlich werden die einzelnen Käufe aufgelistet (siehe Tabelle 21.4).
In Tabelle 21.3 sind alle Informationen über die vorhandenen Artikel aufgelistet. In der Spalte »MwSt.« werden nur zwei Werte verwendet, entweder 7 oder 19. Daher bietet es sich an, diese Werte durch 1:1-Relationen mit einer anderen Tabelle zu verknüpfen. Diese weitere Tabelle würde etwaige Änderungen an der Mehrwertsteuer direkt in die anderen Tabellen einfließen lassen. Die Preise werden in der Tabelle übrigens in Cent angegeben.
Art.-Nr. | Bezeichnung | Preis [Cent] | MwSt |
1 | Brot | 179 | 7 |
2 | Margarine | 79 | 7 |
3 | Conflakes | 299 | 7 |
4 | Duschgel | 349 | 19 |
Die dritte Tabelle 21.4 enthält schließlich die Käufe, die die Kunden aus Tabelle 21.2 tätigen. Abhängig von der Größe dieser Tabelle ist sie selbstverständlich viel zu schwer zu lesen. Die Lesbarkeit steht aber auch nicht an erster Stelle, sondern die »Abfragefähigkeit«, die sich durch eine eindeutige Zuordnung aller Werte auszeichnet.
Kauf-Nr. | Nr. | Art.-Nr. | Stück | Datum |
1 | 2 | 4 | 2 | 2010-07-08 |
2 | 1 | 2 | 1 | 2010-07-12 |
3 | 3 | 4 | 3 | 2010-07-12 |
4 | 1 | 3 | 7 | 2010-07-14 |
Auswahlabfragen
Die Tabellen sind in dieser Form für Menschen nur schwer lesbar, obwohl sie mit einer wahren Informationsfülle dienen können. Lesbare Ausgaben entstehen aber erst durch Abfragen dieser Tabellen. Hierzu beherrschen relationale Datenbanken sogenannte Auswahlabfragen, mit denen anhand der Relationen Daten aus verschiedenen Tabellen zusammengestellt werden. Tabelle 21.5 zeigt das Ergebnis einer solchen Abfrage.
Kauf-Nr. | Nr. | Art.-Nr. | Stück | Gesamtpreis |
1 | 2 | 4 | 2 | 698 |
2 | 1 | 2 | 1 | 79 |
3 | 3 | 4 | 3 | 1047 |
4 | 1 | 3 | 7 | 2093 |
Bemerkenswert ist die Dynamik bei relationalen Datenbanken. Das Ergebnis wird normalerweise nicht gespeichert, da es nur eine Zusammenstellung der Tabellenwerte darstellt. Da sich diese Werte aber jederzeit ändern können, unterliegt das Abfrageergebnis einer gewissen Dynamik.
21.2.2 Installation
Sie installieren MySQL über die Pakete mysql-server und mysql-client. Dies installiert Ihnen automatisch die neueste aktuelle Version von MySQL:
sudo apt-get install mysql-server mysql-client
Hierbei werden auch einige Client- und Perl-Pakete installiert, da erst diese den Zugriff auf die Datenbank gewährleisten.
Tipp 274: Separate MySQL-Partition bei LVM |
Wenn Sie Ihre Festplatte mit LVM partitioniert haben, ist es sinnvoll, eine separate Partition für das Verzeichnis /var/lib/mysql einzurichten. Dies erleichtert beispielsweise die Wartung und Sicherung Ihrer Datenbanken. |
Sicherheit
MySQL kommuniziert nach der Installation im Netzwerk über den Port 3306 und lässt sich über die Datei /etc/mysql/my.cnf konfigurieren. Stellen Sie also sicher, dass Ihre Firewall diesen Port nicht sperrt, oder schließen Sie ihn explizit, wenn Sie die Kommunikation nach außen verhindern möchten.
Tipp 275: MySQL-Logging und Kommunikation mit anderen Rechnern |
Unter Ubuntu sind merkwürdigerweise so gut wie alle Logging-Funktionen standardmäßig deaktiviert. So müssen Sie sogar das General Query Log manuell aktivieren. Dies geschieht mit der Funktion log in der MySQL-Konfigurationsdatei /etc/mysql/my.cnf. Das Fehlerprotokoll lässt sich nicht abschalten und wird unter dem neuen distributionsübergreifenden Standardpfad /var/log/syslog geführt. |
Der MySQL-Server ist standardmäßig unter Ubuntu recht isoliert – Netzwerkverbindungen von außen (über Port 3306) sind gesperrt. Wenn also auch andere Rechner mit dem Server kommunizieren wollen, müssen Sie dies explizit erlauben. Zuständig hierfür ist die Option bind-adress in der bereits genannten Konfigurationsdatei, die standardmäßig nur localhost den Zugriff gestattet: bind-adress=127.0.0.1. Löschen Sie gegebenenfalls diese Zeile, und starten Sie den MySQL-Server durch service mysql restart neu. |
Direkt nach der Installation müssen Sie ein Passwort für den MySQL-Benutzer root angeben. Dieser Benutzer hat – wie der Name schon vermuten lässt – umfassende administrative Rechte und besitzt vollständigen Zugriff auf alle Datenbanken. In der täglichen Arbeit sollten Sie sich allerdings weitere MySQL-Benutzer anlegen, die weniger Rechte und beispielsweise lediglich Zugriff auf bestimmte Datenbanken haben.
Tipp 276: MySQL aus PHP heraus verwenden |
Es ist oftmals praktisch, MySQL von PHP aus zu verwenden. Um dies zu ermöglichen, ist die Installation des Pakets php5-mysql nötig: |
sudo apt-get install php5-mysql |
Dieses Paket enthält die notwendigen PHP-Erweiterungen mysql und mysqli sowie den MySQL-Treiber für die Datenbankschnittstelle des Projekts. |
Automatischer Start
Wie bei allen anderen Diensten auch, können Sie den automatischen Start von MySQL durch das Werkzeug chkconfig beeinflussen. Der Funktionskern des Datenbankservers ist derMySQL-Daemon (mysqld) im Verzeichnis /usr/sbin/mysqld. Dieser wird wiederum durch das Startskript /etc/init.d/mysql gesteuert. Den automatischen Start können Sie selbstverständlich mit Hilfe von chkconfig steuern. Sie aktivieren MySQL durch
chkconfig -a mysql
Anmelden und Konfiguration
Die Verwaltung gelingt am effektivsten über den Kommandozeilenclient mysql. Sie starten den Client durch Eingabe von mysql im Terminal. Der Standardbenutzer ist unter Ubuntu root@localhost, wobei die MySQL-Nutzer normalerweise nicht mit den schon vorhandenen Systemnutzern identisch sind.
Das Anmelden in Ihr MySQL-System gelingt mit Hilfe folgender Syntax:
mysql -u Benutzername -p
Wenn Sie während der Installation von MySQL ein Passwort gesetzt haben, gelingt das Anmelden durch den Befehl
mysql -u root mysql -p
und Eingabe Ihres MySQL-Passworts. Falls der MySQL-Server sich auf einem anderen Rechner im Netzwerk oder im Internet befindet, verwenden Sie die Option -h Hostname oder --host Hostname, beispielsweise
mysql -u root -h server -p
21.2.3 Benutzerverwaltung
Wie Sie an dem MySQL-Standardbenutzer erkennen, ist es möglich, dass Sie sich als Root anmelden, ohne dass Sie dies im System sein müssen. Dies stellt auf Dauer ein ernsthaftes Sicherheitsproblem dar, das Sie durch Vergabe eines Passworts vermeiden können.
Passwort – ja oder nein?
Während der Installation werden Sie aufgefordert, ein Root-Passwort einzugeben, Sie können dieses Feld allerdings auch leer lassen. Wenn Sie allerdings planen sollten, das System in einen produktiven Server zu überführen, dann sollten Sie das Administratorpasswort unbedingt setzen! Sie können dies natürlich auch jederzeit nachholen, indem Sie sich mit dem Befehl mysql -u root mysql in Ihren MySQL-Server einloggen. In der MySQL-Konsole geben Sie folgende Kommandos ein:
update user set Password=password(.... neues Passwort...) where user='root';
flush privileges;
quit
Um den Vorgang zu überprüfen, können Sie den Befehl mysql -u root -p ausführen, um sich an Ihrer lokalen MySQL-Datenbank anzumelden. Wenn das neue Passwort korrekt gesetzt und eingegeben wurde, sind Sie nach Eingabe desselben mit Ihrer MySQL-Datenbank verbunden.
Keine leeren Benutzernamen oder fehlende Paswörter!
Aus Sicherheitsgründen sollten Sie sichergehen, dass es keine Anmeldemöglichkeiten mit leerem Benutzernamen oder ohne Passwort in Ihrem MySQL-System gibt. Bei Ubuntu gibt es – im Gegensatz zu anderen Distributionen – standardmäßig keine solchen Nutzer. Dennoch sollten Sie regelmäßig die Nutzerdatenbank kontrollieren. Dies gelingt durch die folgende Abfrage, die das folgende Ergebnis (Empty set) ausgeben sollte:
mysql> SELECT user, host, password
-> FROM mysql.user
-> WHERE user="" OR password="";
Empty set (0.00 sec)
Benutzer entfernen
Um einen Nutzer zu löschen, verwenden Sie die Abfrage DELETE FROM. Um beispielsweise alle Nutzer mit leerem Benutzernamen oder leerem Passwort zu löschen, können Sie die Abfrage folgendermaßen nutzen:
mysql> DELETE FROM mysql.user
-> WHERE user="" OR password="";
Passwörter ändern
Zum Ändern eines beliebigen Passworts verwenden Sie die Abfrage SET PASSWORD FOR. Für den Benutzer marcus lautet der Befehl folgendermaßen:
mysql> SET PASSWORD FOR
-> marcus@localhost=PASSWORD("Passwort");
21.2.4 Befehlsstruktur und Kürzel
Wie Sie an den oben genannten Zeilen erkennen, müssen Sie innerhalb von MySQL jedes Kommando durch ein Semikolon abschließen. Ohne dieses Abschlusszeichen wechseln Sie nur die Zeile, so dass es möglich ist, längere Anweisungen übersichtlich auf mehrere Zeilen zu verteilen. Eine Ausnahme bei dieser Vorgehensweise mittels eines Abschlusszeichens stellen die internen Kürzel dar, die in Tabelle 21.6 aufgelistet sind.
Kürzel
Jede MySQL-Anweisung besitzt ein Kürzel. Bei denjenigen, die eine SQL-Anweisungszeile abschließen oder modifizieren, müssen Sie dieses Kürzel sogar standardmäßig verwenden. Wenn Sie aus irgendeinem Grund keine Kürzel benutzen möchten, müssen Sie beim Anmelden den Parameter --named-commands voranstellen.
Kürzel | Befehl | Bedeutung |
\ q | exit oder quit | Mit diesem Kürzel melden Sie sich aus dem MySQL-System ab. |
\ h oder \ ? oder ? | help | Dieses Kürzel liefert eine Übersicht aller internen Anweisungen. |
\ d Zeichenfolge | delimiter Zeichenfolge | Statt des Semikolons wird die angegebene Zeichenfolge als Abschluss verwendet. Dies kann sinnvoll sein, wenn Semikola für andere Zwecke verwendet werden müssen, beispielsweise für automatisierte SQL-Befehlsabfolgen. |
\ g | go | Dieses Kürzel können Sie statt des Semikolons verwenden. Dies ist praktisch, wenn Sie dem Semikolon durch \ d eine andere Bedeutung gegeben haben. |
\ G | ego | Mit diesem Kürzel wird die aktuelle Eingabe beendet, und es erfolgt eine Darstellung aller eventuellen Ergebnisse in Tabellenform. |
\ c | clear | Dieses Kürzel bricht die Eingabe einer Anweisung ab, ohne diese auszuführen. |
\ . | source Dateipfad | Das Kürzel führt den Inhalt der angegebenen Datei als SQL-Anweisung aus. |
\ ! Befehl | system Befehl | Dieses Kürzel führt den angegebenen Befehl aus, beispielsweise \ ! clear zum Löschen des Bildschirms. |
\ T Dateipfad | tee Dateipfad | Mit diesem Kürzel werden alle Ein- und Ausgaben in die angegebene Protokolldatei geschrieben. |
\ t | notee | Dieses Kürzel beendet die Protokollierung (siehe T) wieder. |
\ u Datenbank | use Datenbank | Die angegebene Datenbank wird als Standard festgelegt. Dadurch ist es möglich, auf Tabellen dieser Datenbank zuzugreifen, ohne Datenbank.Tabelle schreiben zu müssen. Weiterhin werden neue Tabellen automatisch in dieser Datenbank angelegt. |
\ s | status | Mit diesem Befehl können Sie sich den Status IhresMySQL-Servers anzeigen lassen. |
Selbstverständlich gibt es eine Vielzahl weiterer Befehle. In Tabelle 21.7 habe ich Ihnen einige sehr nützliche Befehle aufgelistet, die Ihnen das Leben mit dem MySQL-Client erleichtern. Die Befehle werden nur übersichtshalber in Großbuchstaben geschrieben – Sie können aber selbstverständlich auch Kleinbuchstaben verwenden. Bei Datenbank- und Tabellennamen wird allerdings zwischen Groß- und Kleinschreibung unterschieden.
Befehl | Wirkung |
SHOW DATABASES | Zeigt eine Liste aller vorhandenen Datenbanken an. |
SELECT DATABASE() | Zeigt an, welche Datenbank gerade als Standard ausgewählt ist. |
SHOW TABLES | Listet alle Tabellen der aktuellen Datenbank auf. |
SHOW TABLES FROM db | Im Gegensatz zum vorigen Befehl werden alle Tabellen der angegebenen Datenbank db angezeigt. |
21.2.5 Datenbanken/Tabellen erstellen und verwalten
In diesem Abschnitt stelle ich Ihnen die wichtigsten SQL-Anweisungen zum Erstellen von Datenbanken und Tabellen vor. Des Weiteren lernen Sie, wie Sie ausgewählte Informationen abrufen sowie Daten und Strukturen verändern. Bei der Verwendung der hier vorgestellten Abfragen haben Sie zwei Möglichkeiten der Nutzung:
- Sie haben in den vorangegangenen Abschnitten bereits den Kommandozeilenclient mysql kennengelernt. Dieser stellt auf eine bequeme und sehr schnelle Art der Verwaltung dar.Allerdings sollten Sie daran denken, dass Sie jeden Befehl mit einem Semikolon abschließen müssen.
- Eine sehr bequeme Art der Verwaltung stellen grafische Clients wie beispielsweise das webbasierte phpMyAdmin dar. Auch wenn Ihr Server keine grafische Oberfläche besitzt, können Sie mit diesem Werkzeug von einem beliebigen Client aus grafisch auf Ihre MySQL-Konfiguration zugreifen. Sie erfahren mehr über phpMyAdmin in dem Tipp »Grafische Verwaltung mit phpMyAdmin«.
Wir haben bereits am Anfang dieses Abschnitts die Grundlagen einer relationalen Datenbank besprochen. Daher behandele ich hier in schnellen Schritten die Grundlagen der MySQL-Syntax.
Eine neue Datenbank erstellen
Die grundlegende SQL-Anweisung zur Erstellung einer neuen MySQL-Datenbank lautet:
CREATE DATABASE datenbankname
Eine Datenbank »lebt« quasi von den zugrundeliegenden Tabellen. Daher nehmen Sie an diesen Tabellen auch die meisten Konfigurationen vor. Die eigentliche Datenbank kennt nur wenige Parameter, die Sie durch Optionen beeinflussen können. Eine Übersicht der wichtigsten Optionen bei der Erstellung einer neuen Datenbank finden Sie in Tabelle 21.8.
Befehl | Wirkung |
[DEFAULT] CHARACTER SET Zeichensatz | Diese Anweisung definiert den Zeichensatz für die Tabellen der aktuellen Datenbank. Standardmäßig ist dies latin1 und sollte für deutschsprachige Inhalte nicht verändert werden. Eine Übersicht aller verfügbaren Zeichensätze erhalten Sie mit Hilfe des Befehls SHOW CHARACTER SET im MySQL-Client. |
COLLATE Sortierfolge | Diese Anweisung legt die Sortierfolge (Kollation) für Ihre Textinhalte fest. Für die deutsche Sprache gibt es zwei mögliche Kollationen: |
Der Zeichensatz latin1_german1_ci sortiert Text nach Wörterbuch, das heißt, Umlaute werden direkt nach ihren direkten Pendants einsortiert. Beispielsweise Männer hinter Mann. | |
Der Zeichensatz latin1_german2_ci sortiert hingegen den Text wie in einem Telefonbuch. Dies bedeutet, dass Umlaute wie beispielsweise »ä« mit »ae« gleichgesetzt werden. | |
IF NOT EXISTS | Diese Anweisung erstellt die angegebene Datenbank nur in dem Fall, dass der Name bisher für keine andere Datenbank verwendet wurde. Es ist notwendig, dass diese Anweisung dem System vor dem Namen der Datenbank gegeben wird. |
Sie erstellen mit Hilfe der folgenden Anweisung eine Datenbank namens rezepte mit dem Zeichensatz latin1 und der Sortierfolge Deutsch (Wörterbuch) und stellen sicher, dass eine Datenbank mit diesem Namen noch nicht existiert:
CREATE DATABASE IF NOT EXISTS rezepte CHARACTER SET latin1
COLLATE latin1_german1_ci
Wenn Sie den Kommandozeilenclient verwenden, vergessen Sie nicht das Semikolon als Abschluss. Im nächsten Schritt sollten Sie diese neu angelegte Datenbank als Standard definieren, damit Sie mit ihr arbeiten können:
mysql> use rezepte
Diese Anweisung benötigt kein Semikolon, da es sich hierbei um einen internen Befehl handelt (siehe Tabelle 21.6)
Sie haben jetzt die Datenbank rezepte angelegt und können sie mit Leben füllen. Dies tun Sie, indem Sie beliebig viele Tabellen einrichten, die sämtliche Informationen einer relationalen Datenbank enthalten. Zu diesem Zweck gibt es den Befehl CREATE TABLE, dessen Syntax folgendermaßen aussieht:
CREATE TABLE tabellenname
(
Spaltenname Datentyp [Optionen]
Spaltenname Datentyp [Optionen]
)[Optionen]
Hinter der letzten Klammer, die die Auflistung der Spalten beendet, können Optionen für die gesamte Tabelle folgen. Die wichtigsten fasse ich in Tabelle 21.9 zusammen.
Option | Bedeutung |
CHARACTER SET Zeichensatz | Legt den Zeichensatz fest, der als Standard für diese Tabelle verwendet werden soll (ähnlich wie bei den Datenbanken). |
COLLATE Sortierfolge | Legt die Sortierfolge fest, mit der Einträge in der Tabelle standardmäßig geordnet werden sollen (ähnlich wie bei den Datenbanken). |
ENGINE=Tabellentyp | Mit dieser Option legen Sie den Typ (englisch: storage engine) der Tabelle fest. Unter Ubuntu ist der Standardtyp MyISAM. Dieser Typ besitzt eine größere Leistungsfähigkeit als InnoDB. Der Standardtyp bei Windows-Systemen hingegen ist InnoDB, der mehr Funktionen unterstützt. Vorsicht bei einem Systemwechsel: Es bietet sich an, den Standardtabellentyp immer explizit anzugeben! |
Wir werden uns im Folgenden den Details widmen, wollen aber vorher noch eine Beispieltabelle erstellen, die zu unserer Datenbank rezepte passt. Wir geben bei der Erstellung gleichzeitig an, dass die Tabelle nur angelegt werden darf, wenn ihre Bezeichnung noch nicht verwendet wurde (ähnlich wie bei den Datenbanken):
CREATE TABLE IF NOT EXISTS rez_zutaten
(
zut_id INT AUTO_INCREMENT,
zut_name VARCHAR(40),
zut_herkunft INT,
zut_quelle VARCHAR(30),
PRIMARY KEY (zut_id),
INDEX (zut_name)
);
Wie Sie an dem obigen Beispiel erkennen, habe ich dieser Tabelle und allen Spalten ein gemeinsames Namenspräfix zugewiesen. Dies hat den Vorteil, dass der Zusammenhang zwischen den Daten auf den ersten Blick deutlich wird. Des Weiteren haben Sie es hier mit eindeutigen Bezeichnungen zu tun. Bei einer Vielzahl von Datenbanken mit eventuell gleichartigen Spalten brauchen Sie sich so keine Sorgen um eventuell doppelt vorhandene Bezeichnungen zu machen.
Im obigen Beispiel haben wir unter anderem einige Anweisungen genutzt, die ich in Tabelle 21.10 näher erläutere. Statt des Datentyps VARCHAR können Sie beispielsweise auch die folgenden Typen nutzen:
- Date kann ein beliebiges Kalenderdatum enthalten.
- ENUM speichert einen Wert aus einer vorgegebenen Liste von Alternativen.
Struktur ausgeben lassen
Wenn Sie eine Tabelle erzeugt haben, können Sie sich mit Hilfe des Kommandozeilenclients ihre Struktur ausgeben lassen. Zu diesem Zweck nutzen Sie den Befehl:
DESCRIBE rez_zutaten
Um sämtliche Optionen anzuzeigen, die aufgrund von Standardeinstellungen der übergeordneten Datenbank oder des Servers selbst zustande kommen, dient der Befehl:
SHOW CREATE TABLE rez_zutaten \G
Index
Auf das Feld zut_name habe ich einen einfachen Index gesetzt. Einen solchen Index können Sie sich genauso vorstellen wie den alphabetischen Index am Ende dieses Buchs. Ein Index speichert die verschiedenen Werte eines Feldes erneut, zusammen mit den Stellen, an denen diese Werte in der Tabelle vorkommen. In unserem Fall beschleunigt der Index die Suche und das Sortieren nach Zutatennamen.
Beachten Sie bitte, dass Indizes die Größe Ihrer Tabellen vervielfachen. Aus diesem Grund sollten Sie Indizes maßvoll einsetzen. Beschränken Sie sie auf Felder, nach denen häufig gesucht wird.
Anweisung | Bedeutung |
zut_id | Dies stellt den sogenannten Primärschlüssel dar. Hierbei handelt es sich um einen eindeutigen Wert, der den gesamten Datensatz repräsentiert und damit in anderen Tabellen als Verweis auf die jeweiligen Zutaten dienen kann. Der Datentyp dieser Spalte ist [INT] (Ganzzahl). Die Option AUTO INCREMENT sorgt dafür, dass die Felder dieser Spalte automatisch durchnummeriert werden. |
zut_name | Dies definiert den genauen Namen der einzelnen Zutat. Hierbei soll die Bezeichnung vom Typ VARCHAR(40) sein, also ein String variabler Länge mit maximal 40 Zeichen. |
zut_herkunft | Diese Spalte soll die Länder, aus denen die Zutaten kommen, enthalten. In diesem Fall wollen wir aber nicht die Namen der Länder speichern, sondern eine ganze Zahl. Diese wiederum verweist als sogenannter Fremdschlüssel auf eine weitere Tabelle, die die Namen der einzelnen Länder speichert. |
zut_quelle | Dies definiert den Ort, an dem wir die einzelne Zutat erwerben können, also beispielsweise Wochenmarkt oder Supermarkt. Hierbei soll die Bezeichnung vom Typ VARCHAR(30) sein, also ein String variabler Länge mit maximal 30 Zeichen. |
21.2.6 Datentypen
Sie werden in Abschnitt 21.2.7, »Daten einfügen«, lernen, wie Sie Daten in eine Tabelle einfügen. Vorher möchte ich aber noch einige Worte zu den verwendbaren Datentypen verlieren. Für unterschiedliche Arten von Daten gibt es jeweils andere Datentypen:
- Numerische Datentypen
Diese Art von Datentypen lassen sich in zwei Gruppen unterteilen: - Integertypen
Die Integertypen speichern ganze Zahlen mit unterschiedlicher Bitbreite, aus der sich der speicherbare Wertebereich ergibt. Wenn Sie zu große oder zu kleine Werte in eine Spalte mit Integer-Datentyp eingeben, wird der größt- bzw. kleinstmögliche Wert verwendet.
Datentyp | Bit | Wertebereich | Unsigned-Wertebereich |
TINYINT | 8 | -128 bis +127 | 0 bis 255 |
SMALLINT | 16 | -32.768 bis 32.767 | 0 bis 65.535 |
MEDIUMINT | 24 | -8.388.608 bis +8.388.607 | 0 bis 16.777.215 |
INT | 32 | -2.147.483.648 bis +2.147.483.647 | 0 bis 4.294.967.295 |
BIGINT | 64 | -9.223.372.036.854.775.808 bis +9.223.372.036.854.775.807 | 0 bis 18.446.744.073.709.551.615 |
- Fließkommazahlen
Für Fließkommazahlen stehen Ihnen zwei Typen zur Verfügung: FLOAT mit 32 Bit und DOUBLE mit 64 Bit. Der Unterschied zwischen den beiden Typen liegt in der Anzahl der möglichen Stellen, also in der Genauigkeit. Die englische Bezeichnung lautet übrigens Floating Point Numbers, und daran wird deutlich, dass Sie unbedingt Punkte statt Kommata verwenden müssen.Eine Besonderheit ist der Datentyp DECIMAL(m,n), der eine Speichermöglichkeit für Festkommazahlen darstellt, bei der die Anzahl der Stellen definiert werden kann. So bedeutet die Schreibweise DECIMAL(5,2), dass Sie Werte zwischen -999.99 und 999.99 speichern können. Ein beliebter Anwendungsbereich für diesen Datentyp sind Währungsbeträge.
- String-Datentypen
Bei Strings gibt es zwei Datentypen:- [CHAR(n)] Dieser Datentyp kann bis zu 255 Zeichen enthalten und belegt stets die bei der Definition angegebene Zeichenanzahl (n) – auch wenn der tatsächliche Inhalt kürzer ausfällt. Ein Feld mit der Definition CHAR(100) ist somit immer 100 Zeichen breit. Der Vorteil dieses Datentyps liegt in seiner Geschwindigkeit.
- [VARCHAR(n)] Dieser Datentyp verwendet, im Gegensatz zum vorigen, nur den Speicher, den die aktuell enthaltenen Zeichen benötigen. Ein Feld mit der Definition VARCHAR(100) bietet Platz für bis zu 100 Zeichen. Dieser Datentyp ist etwas langsamer, dafür aber platzsparender.
- Datums- und Uhrzeitangaben
MySQL stellt Ihnen eine Reihe von verschiedenen Formaten für Datum und Uhrzeit zur Verfügung. Im Einzelnen sind diese in Tabelle 21.12 dargestellt.
Typ | Bedeutung |
DATETIME | Bei diesem Typ wird eine vollständige Zeitangabe aus Datum und Uhrzeit im Format JJJJ-MM-TT hh:mm:ss abgespeichert. Wenn Sie beim Einfügen von Werten auf die Uhrzeit verzichten, wird diese auf 00:00:00 gesetzt. |
DATE | Dieser Typ enthält lediglich das Datum. |
TIME | Dieser Typ enthält lediglich die Uhrzeit. |
TIMESTAMP | Im Gegensatz zum Typ DATETIME werden die TIMESTAMP-Felder beim Einfügen und bei jeder Änderung mit der aktuellen Systemzeit aktualisiert. |
- Aufzählungstypen
Die Aufzählungstypen sind nicht im SQL-Standard definiert und stellen eine Besonderheit von MySQL dar. Man unterscheidet hier zwischen den Typen ENUM und SET.
21.2.7 Daten einfügen
In den vorigen Abschnitten haben wir eine Datenbank erstellt und ihr mit Hilfe von Tabellen Leben eingehaucht. Ein Schönheitsfehler ist dennoch vorhanden, denn noch sind die Tabellen leer. Um also Werte in die vorhandenen Tabellen einzufügen, verwenden Sie die Anweisung INSERT. Die grundlegende Syntax sieht folgendermaßen aus:
INSERT INTO tabellenname (Spalte1, Spalte2, ...)
VALUES (Wert1, Wert2, ...),
(Wert1, Wert2, ...)
Nach dem Schlüsselwort VALUES folgt der Datensatz, der in dieser Reihenfolge in die Tabelle eingefügt wird. Mehrere Datensätze können Sie durch Kommata getrennt eingeben.
Wenn Sie immer komplette Datensätze angeben, können Sie die Angabe der Spalten weglassen. Diese Angabe ergibt nur Sinn, wenn Sie eventuell lediglich einzelne Werte angeben möchten. Bei einer Tabelle, in deren erster Spalte eine ID vergeben wird (AUTO_INCREMENT), müssen Sie entweder die Spalten dennoch angeben oder dem ersten Feld den Wert NULL zuordnen. Als Beispiel fügen wir eine Zutat in unsere Tabelle rez_zutaten ein:
INSERT INTO rez_zutaten
VALUES (NULL, "Pfeffer", "Indien", "Supermarkt")
Wie Sie an dem obigen Beispiel sehen, gehören Strings sowie Datums- und Uhrzeitangaben in Anführungszeichen. Hierbei ist es bei MySQL egal, ob Sie einfache oder doppelte verwenden – ganz im Gegensatz zu anderen Datenbanken wie PostgreSQL. Der ANSI-SQL-Standard schreibt einfache Anführungszeichen vor, weil doppelte für Tabellen- und Spaltenbezeichnungen reserviert sind, in denen Leerzeichen vorkommen oder die genauso heißen wie offizielle SQL-Bezeichner.
Tipp 277: Grafische Verwaltung mit phpMyAdmin |
Für den Einsatz in Verbindung mit der Datenbank MySQL empfiehlt sich die Installation des Pakets phpmyadmin. Durch Auswahl dieses Pakets wird das gesamte Spektrum der XAMP-Software installiert. Zusätzlich haben Sie mit dem Tool ein exzellentes Konfigurationswerkzeug zur Hand. Während der Installation wird gegebenenfalls die Konfiguration des zusätzlich benötigten postfix-Pakets angefordert, hier wählen Sie einfach no configuration. Wenn Sie diesem Kapitel bisher gefolgt sind, wählen Sie bei der Frage nach dem Webserver, der konfiguriert werden soll, Apache per Leertaste aus. |
Der größte Vorteil von phpMyAdmin ist der Fakt, dass Sie das Programm über einen Webbrowser von jedem beliebigen Ort aus bedienen können. Dies ist insoweit etwas Besonderes, als die meisten (grafischen) Konfigurationsprogramme nur lokal ausgeführt werden können. |
Die Frage, ob die Datenbank für phpMyAdmin mit dbconfig-common konfiguriert werden soll, sollten Sie mit Ja beantworten. Schließlich müssen Sie noch das Administratorpasswort und das Datenbankpasswort setzen. Nach der Installation geben Sie im Server die lokale IP-Adresse oder das Schlüsselwort http://localhost/phpmyadmin/ bzw. http://<hostname>/phpmyadmin/ an. Es öffnet sich die Administrationsstartseite, und Sie müssen sich in das System einloggen. Als Login-Namen verwenden Sie root, das Passwort ist das bei der Installation von mysql-server gesetzte. Darauf sollte sich die Administrationsoberfläche von phpMyAdmin öffnen (Abbildung 21.2). |
Anschließend können Sie (entsprechende Kenntnisse vorausgesetzt) bestehende Datenbanken verändern, neue Datenbanken anlegen und diese administrieren. Die Bedienung ist recht intuitiv und kurzfristig erlernbar. Sie finden viele Erläuterungen und Tipps auf der Seite www.phpmyadmin.net. |
Tipp 278: MySQL-Workbench nutzen |
Eine weitere kostenlose und zugleich komfortable grafische Oberfläche zur Verwaltung von MySQL erhalten Sie von der Seite des Herstellers: http://dev.mysql.com/downloads/workbench/5.2.html. |
Das Programm ist Open Source, und daher ist es verwunderlich, dass es nicht direkt in den Ubuntu-Quellen zu finden ist. Trotzdem lässt es sich leicht installieren. Auf der genannten Seite finden Sie speziell für Ubuntu vorbereitete Pakete im 32- und 64-Bit-Format. Besonders komfortabel ist die Erstellung neuer Datenbankschemata. |
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.