|
|
|
6.2 Datenbanken und SQL
|
|
|
|
|
6.2.1
Einleitung
Im diesem Kapitel werden Sie eine Menge von Datenbanken und geeigneten Zugriffsmethoden hören. Es ist daher wichtig, zunächst einmal die Begrifflichkeiten zu klären: was genau ist eine Datenbank, was ist ein Datenfeld? Anschließend beschäftigen wir uns mit der Datenbank-Abfragesprache SQL.
|
|
|
6.2.2
Datenbanken
Datenbanken sind Datenspeicher in Form von Computerdaten. Sie haben die Aufgabe, große Informationsmengen möglichst schnell und flexibel zu verwalten. Wenn also in Ihrer Kunden-Datenbank 100.000 Kunden eingetragen sind, soll es in Sekundenschnelle möglich sein, Ihren treuesten Kunden herauszufiltern.
| | Eine Tabelle in einer Datenbank ist prinzipiell das gleiche wie eine herkömmliche Tabelle | Wenn man sich die Datenbank als großen Informationsraum vorstellt, kann dieser noch weiter unterteilt werden: eine Datenbank besteht herkömmlicherweise aus einzelnen Tabellen. Mit "Tabelle" ist genau das gemeint, was man sich normalerweise unter diesem Begriff vorstellt - nebenstehender Screenshot illustriert das.
Die kleinste Informationseinheit wird "Datenfeld" genannt. Um auf unsere Tabellen-Analogie zurückzukommen: ein Datenfeld ist eine einzelne Zelle der Tabelle. Eine Reihe von Datenfeldern ist gleich einen Datensatz - in unserem Beispiel wäre das eine Zeile in der Tabelle. Verschiedene Datensätze innerhalb einer Tabelle enthalten oft unterschiedliche Daten, aber immer Daten gleichen Typs. So kann davon ausgegangen werden, dass in unserer Beispiel-Tabelle die erste Spalte immer eine Kundennummer enthält.
Lediglich die erste Zeile der Tabelle stellt eine Ausnahme dar: hierbei handelt es sich nicht um einen Datensatz, sondern um Datenfeldnamen. Sie geben an, welche Daten in der entsprechenden Spalte gespeichert sind.
Übrigens ist die Kundennummer unseres Beispiels ein sogenannter Primärschlüssel: ein eindeutiger Wert. Über den Primärschlüssel bzw. die Kundennummer ist es also möglich, jeden einzelnen Datensatz bzw. Kunden genau zu identifizieren. Wer mit Datenbanken arbeitet, kommt um Primärschlüssel nicht herum.
|
|
|
6.2.3
SQL
Man braucht eine Möglichkeit, der Datenbank mitzuteilen, was man von ihr will. Dafür gibt es Abfragesprachen. Bevor jedoch SQL allgemein eingeführt wurde, gab es viele verschiedene Sprachen. SQL (Structured Query Language) dagegen wird von fast allen Herstellern unterstützt und ist inzwischen zum Standard für Datenbankabfragen geworden.
SQL unterstützt alle Operationen, die zum Zugriff auf Datenbanken notwendig sind. Es ist möglich, dass die Syntax Ihrer Datenbank sich leicht von unseren Beispielen unterscheidet, denn die wurden mit MySQL (populäre, kostenlose OpenSource-Datenbank) getestet.
Eine zusammenhängende SQL-Anweisung wird "Statement" genannt. Im Folgenden finden Sie die wichtigsten Befehle, aus denen sich Statements zusammensetzen lassen. Wie diese Statements dann an die Datenbank übergeben werden, dazu weiter unten mehr.
6.2.3.1 Tabellen anzeigen
Wenn Sie wissen wollen, welche Tabellen in der Datenbank vorhanden sind:
SHOW TABLES
6.2.3.2 Informationen über Tabelle
Folgender Befehl beschreibt die Tabelle tblname:
DESCRIBE tblname
6.2.3.3 Tabelle löschen
Wenn Sie eine Tabelle (hier tblname) löschen wollen, verwenden Sie diesen Befehl:
DROP TABLE tblname
6.2.3.4 Neue Tabelle anlegen
Das Anlegen einer neuen Tabelle ist etwas komplexer. Die Syntax des Befehls ist:
CREATE TABLE tblname (FELDER)
6.2.3.4.1 Die Feldnamen
Bis hierhin ist es einfach. Etwas komplizierter ist das, was zwischen den Klammern stehen muss: die Liste der Datenfeldnamen. Für jeden Datenfeldnamen muss zusätzlich noch ein Typ festgelegt werden, damit die Datenbank die Daten effizienter verwalten kann.
Innerhalb dieser Liste werden die verschiedenen Elemente durch Kommata getrennt:
Feldname1 Feldtyp, Feldname2 Feldtyp ...
6.2.3.4.2 Feldtypen
Der Feldname ist dabei ziemlich beliebig, sollte jedoch nicht länger als 255 Zeichen sein und keine Sonderzeichen enthalten. Welche Feldtypen Ihre Datenbank unterstützt, müssen Sie in Ihrer Datenbank-Dokumentation nachschlagen. Recht allgemeingängig aber ist beispielsweise der Typ Integer, der ganze Zahlen speichert. MySQL kennt diverse Variationen dieses Typs, so z.B. ShortInt für Zahlen kleiner 256 oder LongInt für extrem große Zahlen.
Ein anderer Feldtyp, in erster Linie für Zeichenketten bis 255 Zeichen länge, ist VARCHAR(LÄNGE). Zwischen den Klammern muss die mögliche Maximal-Länge der Zeichenkette eingetragen werden. Wer VARCHAR verwendet, spart Platz: denn im Gegensatz zum Typ CHAR(LÄNGE) werden hier nur die Informationen gespeichert, die auch tatsächlich benötigt werden.
6.2.3.4.3 Optionen
Manchmal ist es notwendig, noch weitere Angaben zu machen. Beispielsweise, um der Datenbank mitzuteilen, dass ein Datenfeld als Primärschlüssel verwendet werden soll. In so einem Fall ist es angenehm, wenn sich die Datenbank automatisch um das Setzen passender Werte kümmert.
Solche Angaben werden hinter dem Feldtyp angegeben:
Feldname1 Feldtyp Optionen, Feldname2...
In folgenden Beispielen sehen Sie das in der Praxis: AUTO_INCREMENT sorgt dafür, dass der Wert (bzw. der Primärschlüssel) bei jedem neuen Eintrag automatisch um 1 erhöht wird. PRIMARY KEY kennzeichnet das Feld als Primärschlüssel, und UNSIGNED speichert den Wert ohne Vorzeichen.
Die Kombination dieser Werte sorgt also dafür, dass Sie einen numerischen Primärschlüssel haben, der bei jedem neuen Datenbank-Eintrag automatisch angelegt wird. Wenn Sie auch MySQL verwenden, sollten Sie sich diese Kombination merken. Auch hier gibt es leider wieder Datenbank-spezifische Unterschiede. Der Microsoft SQL-Server beispielsweise geht etwas anders mit solchen Angaben um.
6.2.3.4.4 Beispiele
CREATE TABLE accounts (id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT, sitename VARCHAR(255), url VARCHAR(255), password VARCHAR(255), pitoday INTEGER UNSIGNED, piever BIGINT UNSIGNED, email VARCHAR(255), activated TINYINT, StatsPublic TINYINT, BannerURL VARCHAR(255), LoggedIn DATETIME)
Ein kürzeres Beispiel:
CREATE TABLE testtabelle (primkey INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT, nachname VARCHAR(255), adresse VARCHAR(255))
6.2.3.5 Daten abrufen
Um Daten abzurufen, wird der SELECT-Befehl verwendet:
SELECT colname1,colname2 FROM tblname WHERE expression ORDER BY colname
colname ist ein Datenfeldname. Nur die hier angegebenen Spalten werden auch ausgegeben. Will man alle Spalten ausgeben, verwendet man "*".
expression ist eine Bedingung, mit der die auszugebenden Datensätze ausgewählt werden: Nur, wenn die Bedingung zutrifft, wird der gerade geprüfte Datensatz ausgegeben. Die meistgenutzten Vergleichsoperatoren sind hier =,>,<,<= und >=. Datenfeldnamen bzw. Spaltennamen dürfen hier verwendet werden.
Beispiele für expression:
colname = "Hallo"
wert1 < wert2
id = 10
ORDER BY erlaubt eine Sortierung der Ergebnisse. Es muss ein Datenfeldname folgen, nach dem dann sortiert wird. Wer beispielsweise ORDER BY id angibt, erhält zuerst die Datensätze mit der kleinsten ID. Wer die Sortierung umkehren will, setzt ein DESC (für "descending", absteigend) ans Ende: ORDER BY id DESC
Beispiel für eine zusammenhängendes Statement:
SELECT adresse FROM testtabelle WHERE nachname = "Meier"
6.2.3.6 Daten einfügen
Um neue Datensätze einzufügen, gibt es den INSERT-Befehl:
INSERT INTO tblname VALUES(val1,val2,val3)
Die VALUES-Liste enthält Werte für die Felder des neuen Datensatzes, in der Reihenfolge, in der die Felder angeordnet sind (siehe "Informationen über Tabelle"). Will man zu einem Datenfeld (z.B. Primärschlüssel, denn der soll ja automatisch erzeugt werden) keine Angabe machen, verwendet man - bei MySQL - ein "NULL".
Beispiel:
INSERT INTO testtabelle VALUES(NULL,"Meier","Schmitzstraße 3")
6.2.3.7 Daten ändern
Für Datenänderungen gibt es den UPDATE-Befehl:
UPDATE tblname SET colname1=wert1,colname2=wert2 WHERE expression
Nach dem SET muss also eine Liste der zu aktualisierenden Datenfelder angegeben werden, die nach dem Muster Datenfeldname=neuer Wert aufgebaut ist.
6.2.3.8 WHERE expression funktioniert hier genauso wie beim SELECT-Befehl.
Beispiel:
UPDATE testtabelle SET adresse="Holzweg 13" WHERE nachname="meier"
6.2.3.9 Daten löschen
Wer Datensätze löschen will, verwendet den DELETE-Befehl:
DELETE FROM tblname WHERE expression
WHERE expression funktioniert hier genauso wie beim SELECT-Befehl.
Beispiel:
DELETE FROM testtabelle WHERE nachname="meier"
6.2.3.10 SQL verwenden
| | MySQL-Bedienung über die Kommandozeile. |
Es stellt sich die Frage, wie Sie SQL denn überhaupt einsetzen können. Es gibt zwei bekannte Methoden: entweder, Sie übergeben Ihre Befehle direkt an die Datenbank (beispielsweise über die Kommandozeile), oder Sie gehen den "Umweg" über eine Programmiersprache. Letzteres hat den Vorteil, dass die Daten später noch weiterverarbeitet werden können und ist Thema der folgenden Kapitel.
|
|
|
|