Impressum | Kontakt | Jobs
Aufdringliche Selbstdarstellung seit 1996
Homepage
von
Alexander
Auer

MySQL - Datenbanken für Alle

Datenbank-Programmierung ist gar nicht so schwer, wie es sich anhört. Lernen Sie in unserem Praxiskurs die wichtigsten Anweisungen und Befehle von MySQL kennen.

Datenbankexperten gehören zu den am Besten bezahlten und begehrtesten Mitarbeitern am IT-Sektor. Denn Databasemanagement ist heutzutage das Um und Auf in jedem Unternehmen, ebens- wie im Internetbereich.
Mit einem Basiswissen in Datenbank-Programmierung können kleinere Projekte relativ einfach selbst erstellt werden, wodurch den Experten mehr Freiraum für komplexe Fragestellungen bleibt.
Dieser Einführungskurs beschäftigt sich mit den Grundlagen der SQL-Programmierung am Beispiel der Datenbanksprache MySQL. MySQL bietet mehrere Vorteile: Es ist einfach zu lernen, arbeitet (im Internetbereich) hervorragend mit der serverseitigen Skriptsprache PHP zusammen und ist überdies in der Benutzung kostenlos.

Grundbegriffe
SQL steht für 'Structured Query Language'. Neben MySQL zählen auf Oracle, DB2, Access oder Informix zu dieser Gruppe. Um den Umgang mit Datenbanken zu erlernen, muss man zuerst die Struktur von Datenbanksystemen verstehen.
An oberster Stelle der Hierarchie steht das Database Management System (DBMS). Damit wird das installierte System (als- z.B. MySQL) bezeichnet, inklusive aller Tools und Programme, die für die Eingabe und Abfrage von Datensätzen nötig sind.
Innerhalb dieses DBMS können nun einzelne Datenbanken erstellt werden. Innerhalb der Datenbanken werden Tabellen angelegt. Die Tabellen setzen sich aus Reihen und Spalten zusammen. Jede Reihe hat einen eigenen Feldnamen (z.B. 'ID-Nummer'), eine Zeile stellt einen Datensatz dar (z.B. 'User XY', 'Passwort', 'email@adresse.com'). In der Grafik können Sie den Aufbau anhand des folgenden Beispiels nachvollziehen.
Die Befehle werden direkt an der SQL-Eingabeaufforderung eingegeben. Wenn vorhanden auch über eines der verfügbaren Tools (z.B. MyAdmin). Kommandozeilen werden immer mit einem Semikolon (;) abgeschlossen.
Um MySQL verwenden zu können, muß das entsprechende Modul am Server installiert sein. Sollten das bei Ihnen nicht der Fall sein, s- können Sie bei http://www.xodox.com/ kostenlos Webspace mit PHP3 und MySQL Unterstützung mieten.

Tabelle anlegen
Der erste Schritt besteht darin, eine Datenbank und dazugehörige Tabellen anzulegen. Im MySQL Eingabemodus geschieht dies mit folgender Befehlszeile:
create database Testdatenbank;
Nun haben wir eine Datenbank namens Testdatenbank, in die wir Tabellen einfügen können. Die Erstellung von Tabellen geschieht mit beinahe dem gleichen Befehl. Zusätzlich muß aber noch die Information übergeben werden, welche Felder die Tabelle enthalten soll und was für Datentypen in diesen erwartet werden.
Spätestens hier sollte ein genauer Plan erstellt werden, denn die Leistungsfähigkeit (sprich: die Geschwindigkeit, in der Daten ein- und ausgelesen werden können) hängt unmittelbar mit einer guten Struktur der Datenbank zusammen.
Angenommen Sie wollen eine sehr kleine Datenbank zur Verwaltung Ihrer Finanzen erstellen. Sie benötigen Felder für:
- Bezeichnung der einzelnen Postens
- Betrag
- Typ (Ausgabe oder Einnahme)
Zusätzlich empfiehlt es sich, ein Feld mit einer eindeutigen Identifizierungsnummer anzulegen, damit, falls einzelne Daten verändert oder gelöscht werden müssen, sie nicht irrtümlich falsche Felder modifizieren.
Die Erstellung einer Tabelle (Table) geschieht mit dem Befehl:
create table Finanzen (id int auto_increment not null, name varchar(200), betrag varchar(20), typ varchar(15), primary key(id));
Somit haben wir eine Tabelle mit dem Namen Finanzen erstellt. Diese enthält 4 Felder namens 'id', 'name', 'betrag' und 'typ'. Mittels
desc Finanzen;
können sie die Definition der eben erstellten Tabelle sichtbar machen (desc=describe).
Neben dem Namen der einzelnen Felder haben wir der Datenbank auch mitgeteilt, welcher Typ von Daten enthalten sein soll. Die wichtigsten Datentypen sind:
- Integer (int): Zahlen
- Varchar: Zeichenketten bis zu 255 Zeichen, die Zahl in der Klammer bestimmt die höchstmögliche Länge
- Float: Fließkommazahlen. In Klammer wird der höchstmögliche Wert und die erwartete Anzahl von Dezimalstellen übergeben (z.B. bei float(5,2) erlaubter Wert: 121.23)
- Date: Datumswerte im Format YYYY-MM-DD
- Text: Zeichenketten zwischen 255 und 65535 Charakteren

Eine sehr hilfreiche Funktion in MySQL ist die Definition von 'auto_increment'. Steht dieser Parameter bei einem Feld, s- wird der darin enthaltene Wert bei jedem Aufruf um 1 erhöht. Um diese Funktion zu nutzen, muß die entsprechende Zelle als Primärschlüssel definiert werden (primary key). Das bedeutet, daß der Wert dieser Zelle nicht doppelt vergeben werden darf, wodurch eine eindeutige Identifizierung dieser Datenzeile anhand dieses Feldes möglich ist.
Not_null weist die Datenbank an, daß dieses Feld unbedingt einen Wert enthalten muß (bei leeren Feldern spricht man von einem Wert 'Null').

Daten in die Tabelle einfügen
Nachdem die Tabelle nun erfolgreich angelegt wurde, ist es Zeit, sie mit Daten zu befüllen. Dies geschieht mittels 'insert'-Befehl:
insert int- Finanzen values (id,'Computer','15000','Ausgabe');
Wir geben als- den Befehl zur Eingabe (insert into), spezifizieren welche Tabelle davon betroffen sein soll (Finanzen) und weisen den einzelnen Datenfeldern ihre Werte zu (Reihenfolge beachten!). 'Id' kann in diesem Fall, da es als 'auto_increment' definiert ist, ohne Werte-Zuweisung aufgerufen werden und erhöht sich um 1.
Beachten Sie, daß die Werte immer in einfachen Hochkommas angeführt und durch Beistriche voneinander getrennt werden müssen. Ebens- muß die Anzahl der übergebenen Werte mit der Anzahl der definierten Felder übereinstimmen, da sonst eine Feldermeldung erfolgt.
Legen Sie nach obigem Muster mehrere Datenzeilen mit verschiedenen Werten an.

Daten auslesen
Nachdem unsere Tabelle nun mehrere Datenzeilen enthält, sollen diese natürlich auch wieder auslesen werden. Dies geschieht mittels 'select'-Statement:
select * from Finanzen;
Dieser Befehl gibt die Anweisung alle Tabellenfelder (durch die Wildcard *) der Tabelle 'Finanzen' ohne zusätzlich Einschränkung auszulesen. Normalerweise will man jedoch nur ganz bestimmte Datensätze, die vordefinierten Anforderungen entsprechen, auslesen. Z.B. wollen wir nur diejenigen Datensätze als Ergebnis bekommen, bei denen es sich um Ausgaben handelt (definiert im Feld 'typ'). Der Befehl dazu lautet:
select * from Finanzen where typ='Ausgabe';
Durch die zusätzliche 'where'-Klausel wird der Datensatz gefiltert und enthält nur mehr jene Daten, die den gestellten Anforderungen entsprechen.
Wie jedoch vorgehen, wenn man alle vorhandenen Daten sehen will, in denen ein bestimmter Wortteil vorkommt? Der Befehl ist der Gleiche, nur wird statt des '=' Zeichens der Vergleichsoperator 'like verwendet:
select * from Finanzen where typ like '%usga%';
Die Prozentzeichen entsprechen in MySQL einer Wildcard. Bei dieser Abfrage werden alle Werte im Ergebnis angeführt, die in der Zeichenkette 'usga' enthalten (unabhängig von der Position). Als- sowohl 'ausgabe', wie auch 'usgarak' oder 'warusga'.
Weitere zulässige Vergleichsoperatoren sind:
- < bzw. > (kleiner bzw. größer als).
Bsp: select * from Finanzen where betrag < 10000;
- != (not, Gegenteil von =)
Bsp: select * from Finanzen where name!='computer';
- is not null / is null (d.h. dürfen keine / müssen Werte enthalten sein)
Bsp: select * from Finanzen where typ is not null;
Gerade bei komplexeren Tabellen mit mehreren Feldern ist es oft unübersichtlich, die Werte aller Felder angezeigt zu bekommen. Deshalb kann man auch ganz gezielt nur einzelne Felder ansprechen (Feldname statt * in der Abfrage):
select name from Finanzen where betrag<=20000;

Zusatzattribute
Die standardmäßige Ausgabe einer Abfrage erfolgt in der Reihenfolge der Eintragung. Nicht immer ist dies gewünscht, oft will man die Anordnung selbst festlegen. Zu diesem Zweck gibt es einige Zusatzattribute:
select * from Finanzen order by name desc;
Der Zusatz 'order by' definiert das Feld (in diesem Fall 'name') nach welchem die Ergebnisse sortiert werden sollen. Standardmäßig ist asc (ascending - aufsteigend) definiert, man kann die Reihenfolge mittels desc (descending - absteigend) auch umkehren.
Für den Fall, daß man wissen will, wie viele eindeutige Werte in einer Zelle vorkommen, gibt es die 'distinct'-Funktion.
select distinct typ from Finanzen;
Diese Anweisung sollte nur die beiden Werte 'Ausgabe' und 'Einnahme' als Ergebnis liefern.
Die insgesamte Anzahl an enthaltenen Datensätzen (Zeilen) lässt sich mittels der 'count'-Funktion ermitteln:
select count(*) from Finanzen;


Datensätze löschen und bearbeiten
Der 'insert'-Befehl gilt nur für das Einfügen neuer Datensätze. Um schon bestehende Datensätze zu verändern, gibt es die 'update'-Anweisung:
update Finanzen set name='Drucker' where id='1';
Dadurch wird in dem Datensatz mit der Identifikationsnummer 1 das Datenfeld 'name' mit dem Wert 'Drucker' belegt. Verwenden Sie keine 'where'-Bedingung, s- wird bei allen Datensätzen das Feld 'name' mit diesem Wert belegt! An diesem Beispiel sieht man auch den Nutzen eines Primärschlüssels, da man sicher gehen kann, welche Datensätze von den Änderungen betroffen sein werden.
Wollen Sie Datensätze löschen, s- geben sie folgende Anweisung:
delete from Finanzen where name='Drucker';
Auch hier gilt wieder: wird keine 'where'-Bedingung gegeben, s- werden alle Felder in der Tabelle gelöscht!

Tabelle modifizieren und löschen
Wir merken bei unserer Finanz-Tabelle, daß wir zwar die Ein- und Ausgaben erfassen können, jedoch keine zeitliche Zuordnung treffen. Wir möchten als- ein neues Feld mit der Bezeichnung 'Datum':
alter table Finanzen add datum date;
'Alter table' weist auf eine zu ändernde Definition, 'add' spezifiziert, daß eine neues Feld hinzugefügt werden soll. Schon bestehende Datensätze weisen in diesem Feld einen 'Null'-Wert auf.
An dieser Stelle soll nochmals ausdrücklich darauf hingewiesen werden, wie wichtig langfristige und vorausschauende Planung beim Datenbank-Design ist. Stellen Sie sich vor, Sie verfügen bereits über ein komplexes System und müssen erkennen, daß grundlegende Felder in der Datenbank fehlen. Das Dazufügen oder Entfernen von Feldern kann nicht kalkulierbare Auswirkungen auf bereits bestehende Abfragen haben!
Zum Abschluss darf natürlich nicht unerwähnt bleiben, wie man eine Tabelle wieder löschen kann. Der Befehl lautet:
drop table Finanzen;
Damit werden die Tabelle und alle Inhalte entfernt.

Mit diesem Grundgerüst an Befehlen können Sie die wichtigsten Operationen in MySQL bereits ausführen. Natürlich stellt diese Einführung nur einen sehr groben Ausschnitt aus dem Funktionsumfang dieser Datenbanksprache dar. Weiterführende Informationen finden Sie unter folgenden Links:
- http://www.mysql.net/
Download, Installation & Referenz

- http://www.devshed.com/Server_Side/MySQL/
Einsteiger-Tutorial PHP & MySQL (E)


Zurück zur Übersicht