VOICE-Homepage: http://de.os2voice.org |
April 2004
Inhaltsverzeichnis
|
Von Wolfgang Draxler © April 2004 |
Nun kommen wir zum dritten Teil meines Artikels. Diesmal werden wir uns näher mit den Console-Befehlen und mit der Therorie von SQL beschäftigen. Als Beispiel werden wir eine Adreßdatenbank erstellen.
Für die Erstellung der Datenbank "Adressen" werden wir das WPS-Objekt Create Database, das wir im letzten Artikel erstellt haben, verwenden.
Nach dem Drücken von Öffnen bzw. open wird die Datenbank erstellt. Nun öffnen Sie die MySQL-Console und geben folgenden Befehl ein:
mysql> show databases; +------------+ | Database | +------------+ | adressen | | mysql | | test | +------------+ 3 rows in set (0.00 sec)
Wie Sie sehen, hat das Erstellen der Datenbank funktioniert. Nun wechseln Sie mit dem Befehl "use" in die neu angelegte Datenbank "adressen":
mysql> use adressen; Database changed
Um weiterzumachen ist es jetzt notwendig, ein bißchen Theorie durchzunehmen. Prinzipiell unterscheiden wir in der Console zwei Arten von Befehlen:
Besprechen wir kurz die Console-Befehle. Dafür werden wir - wie oben bereits erwähnt - den Befehl "Help" eingeben. Damit erhalten wir folgende Ausgabe:
mysql> help help (\h) Display this help. ? (\?) Synonym for `help'. clear (\c) Clear command. connect (\r) Reconnect to the server. Optional arguments are db and host. edit (\e) Edit command with $EDITOR. ego (\G) Send command to mysql server, display result vertically. exit (\q) Exit mysql. Same as quit. go (\g) Send command to mysql server. nopager (\n) Disable pager, print to stdout. notee (\t) Don't write into outfile. pager (\P) Set PAGER [to_pager]. Print the query results via PAGER. print (\p) Print current command. quit (\q) Quit mysql. rehash (\#) Rebuild completion hash. source (\.) Execute a SQL script file. Takes a file name as an argument. status (\s) Get status information from the server. tee (\T) Set outfile [to_outfile]. Append everything into given outfile. use (\u) Use another database. Takes database name as argument.
Wenn Sie einen Befehl (egal ob Console- oder SQL-Befehl) eingeben und an einer beliebigen Stelle darin den Befehl \c verwenden, wird die aktuelle Eingabe ignoriert und es erscheint wieder der Prompt:
mysql> select * from \c mysql>
Wie wir sehen, wird der eingegebene Befehl ignoriert.
Nun wenden wir uns den SQL-Befehlen zu. In SQL (und so auch in MySQL) gibt es eine Handvoll Befehle, die sich in drei Bereiche unterteilen lassen.
In DDL (Data Definition Language): Diese Befehle erstellen, ändern oder löschen die Struktur der Datenbank. Z.B.:
In DCL (Data Control Language): Diese Befehle steuern die Rechte und Zugriffe auf die Datenbank. Z.B.:
Der letzte Bereich nennt sich DML (Data Manipulation Language). Diese Befehle lesen, löschen oder ändern Sätze in einer oder mehreren Tabellen. (Bei anderen Datenbanken, wie z.B. Oracle, können sich diese Befehle auch auf sogenannte Views/Abfragen beziehen. Momentan gehe ich nicht näher darauf ein, weil MySQL für OS/2 diese Views nicht unterstützt.) Zu dieser Gruppe gehören folgende Befehle:
Eine Tabelle ist Bestandteil einer Datenbank (oder, um es so zu sagen: Eine Datenbank enthält eine beliebige Anzahl von Tabellen). Eine Tabelle ist dabei nichts anderes als eine zweidimensionale Liste. Tabellen können verschiedenartige Typen von Werten (also Zahlen, Texte, Datum, Bilder usw.) speichern.
Der Name der Tabelle ist innerhalb der Datenbank eindeutig. Es ist aber möglich, daß Tabellen mit gleichen Namen in mehreren Datenbanken existieren dürfen.
Eine Tabelle kann mehrere Indizes besitzen. Ein Index hilft MySQL bei der Suche nach Datensätzen in Tabellen. Man könnte dies mit dem Stichwortverzeichnis eines Buchs vergleichen. Um einen Begriff im Buch zu suchen, schauen Sie vorher im Verzeichnis nach und schlagen dann die entsprechend angegebene Seite auf. Sie könnten theoretisch auch das Buch von vorne bis hinten (oder umgekehrt) nach dem Begriff durchsuchen. Nur dauert das bei einem dicken Buch sehr lange. Probieren Sie das mal bei einem 500seitigen Buch. Da werden Sie wahrscheinlich Tage wenn nicht sogar Wochen brauchen.
Laut meinen Informationen kann MySQL bis zu 32 Indizes pro Tabelle verwenden. Um den Index zu bilden, können ein oder mehrere Felder verwendet werden. Der aus den Feldern zusammengesetzte Begriff wird auch Key (Schlüssel) genannt.
Ein besonderer Index ist der Primärindex ("primary index"). Dieser darf nur einmal pro Tabelle angelegt werden, und seine "Keys" müssen eindeutig sein, d.h. es dürfen keine doppelten Einträge im Index vorkommen.
Um dies gleich zu veranschaulichen, werden wir jetzt eine Tabelle "Land" anlegen.
Als erstes sollte man sich immer überlegen, welche Felder (inklusive Typ und Länge),
Primärindex und andere Indizes für die Tabelle benötigt werden. Eine spätere
Änderung ist zwar möglich, produziert aber einen größeren Aufwand.
Für unsere Adreßdatenbank reicht folgende Struktur.
Feldnr | Bezeichnung | Typ | Länge | Beispiel | Index |
---|---|---|---|---|---|
1 | Kurzbezeichnung | Alphanumerisch | 3 | AT, DE, ... | Ja, PK |
2 | Bezeichnung | Alphanumerisch | 45 | Österreich | Ja |
3 | Landesvorwahl | Alphanumerisch | 10 | ++43 | nein |
Wie Sie in der letzten Spalte erkennen, haben wir die Kurzbezeichnung als Primärschlüssel bzw. Primärindex gewählt (PK: "Primary Key"). Der Grund dafür ist, daß es nicht mehrere Länder auf dieser Welt gibt, die die gleichen Kurzbezeichnungen besitzen. Dadurch ist auch gewährleistet, daß man keine Länder doppelt eingibt.
Nun bleibt nur noch die Frage, wie man so eine Tabelle erstellt. Als erstes müssen wir in die Datenbank »Adressen« wechseln (falls Sie dies nicht schon getan haben):
mysql> use adressen; Database changed
Um eine Tabelle anzulegen, verwenden wir den Befehl Create Table. Dieser Befehl hat prinzipiell folgenden Aufbau:
create table <Tabellenname> (<Feldname> <Typ> (<Länge>) [null|not null] [Defaultwert] [Autowert], (<Feldname> <Typ> (<Länge>) [null|not null] [Defaultwert] [Autowert], ..... (<Feldname> <Typ> (<Länge>) [null|not null] [Defaultwert] [Autowert], primery key (Feldname, Feldname, ....));
Sieht ein bißchen kompliziert aus, ist es aber nicht. Schauen Sie sich einfach das folgende Beispiel an und vergleichen Sie es mit unserem obigen Entwurf.
mysql> create table Land ( -> kurzbez char(3) not null, -> bezeichnung varchar(45) not null, -> vorwahl varchar(10), -> primary key(kurzbez)); Query OK, 0 rows affected (0.13 sec)
Was bedeuten nun die einzelnen Zeilen des Befehls?
Die 1. Zeile fängt an mit create table Land. Diese Zeile sagt dem Server, das
eine Tabelle mit dem Namen »Land« anzulegen ist. Ab dem Zeichen »Klammer
auf« werden die Spalten definiert.
Die nächste Zeile kurzbez char(3) not null, bewirkt, daß diese Tabelle eine Spalte hat mit dem Namen "Kurzbez"
hat. Das Feld dient zur Aufnahme einer Zeichenkette ("char"). Die Inhalte, die in
diesem Feld gespeichert werden, können maximal 3 Zeichen aufnehmen. Der Text "not
null" heißt, daß dieses Feld nicht leer sein darf.
Bei der nächsten Zeile des Befehls (der nächsten Spalte der Tabelle) ist es ähnlich. Nur der Name des Feldes ist "Bezeichnung" und die maximale Länge beträgt 45 Zeichen. Ein weiterer Unterschied ist, daß hier der Typ "Varchar" ("variable") verwendet wird. "Char" und "Varchar" sind fast identisch. Beide können alphanumerische Werte (Buchstaben und Ziffern) mit einer Länge von bis zu 255 Zeichen aufnehmen. Der Unterschied ist, daß bei "Char" die Spalte bis zur angegebene Länge mit Leerzeichen bei jedem Satz aufgefüllt wird (dies macht z.B. auch dBase), d.h. wenn jetzt z.B. der Wert "AT" gespeichert werden soll, wird daraus intern "AT " (Beachten Sie das Leerzeichen!). Bei "Varchar" ist dies nicht der Fall, hier wird wirklich nur der Text in seiner echten Länge gespeichert und es erfolgt keine Auffüllung mit Leerzeichen. Beispielsweise wird "Österreich" intern als "Österreich" gespeichert. Auch hier geben Sie eine maximale Länge der Feldinhalte an - in unseren Beispiel also 45. Die tatsächliche Länge der Feldinhalte wird automatisch intern von der Datenbank-Engine gespeichert.
Sie müssen immer überlegen, welcher Datentyp für ein Feld verwendet werden soll und wie man dieses Feld auch in der Zukunft verwenden möchte. Meine eigene Faustregel lautet: Felder bis zu einer maximalen Länge von fünf Zeichen können ruhig mit "Char" definiert werden, darüber hinaus mit "Varchar".
Bei der nächsten Zeile vorwahl varchar(10), ist es ähnlich. Nur verzichten wir diesmal auf "not null". Dadurch darf das Feld auch leer sein (es könnte ja sein, daß man die Vorwahl eines Landes nicht kennt).
Bei der letzten Zeile primary key(kurzbez)); wird es schon interessanter, denn es fängt mit dem Schlüsselwort "primary key" an und sagt MySQL, daß jetzt der Primärindex definiert wird. In der Klammer stehen alle Felder, die zur Bildung des Schlüssels dienen. Die Felder müssen durch einen Beistrich getrennt sein und bereits vorher (innerhalb des Befehls) definiert worden sein. Für unser Beispiel brauchen wir nur die Kurzbezeichnung als Primärindex.
Nach dem Drücken der Eingabetaste wird eine Bestätigung oder Fehlermeldung von MySQL geliefert.
Wenn alles korrekt gelaufen ist, haben Sie nun eine neue Tabelle mit dem Namen "Land". Ob das auch wirklich stimmt, können wir relativ leicht herausfinden - und zwar mit dem bekannten Befehl show tables:
mysql> show tables; +--------------------+ | Tables_in_adressen | +--------------------+ | land | +--------------------+ 1 row in set (0.00 sec)
Bevor ich nun zum Schluß komme, werde ich nur ganz kurz zeigen, wie man einen Datensatz in die Tabelle einfügt. Dies geschieht durch den Befehl Insert into.
mysql> insert into land values ('A','Oesterreich','+43'); Query OK, 1 row affected (0.03 sec)
Schauen Sie sich dazu auch nochmals den Befehl create table aus unserem Beispiel weiter oben an. Um nachzuschauen, ob unser Datensatz jetzt auch wirklich in der Tabelle enthalten ist, geben Sie den folgenden Befehl ein:
mysql> select * from land; +---------+-----------------+---------+ | kurzbez | bezeichnung | vorwahl | +---------+-----------------+---------+ | A | Oesterreich | +43 | +---------+-----------------+---------+ 1 row in set (0.04 sec)
Im nächsten Teil werden wir den Befehl Insert into genauer anschauen.
Weitere Informationen finden Sie unter der folgenden Webadresse: http://www.mysql.com/doc/de/index.html http://www.rent-a-database.de/mysql/
Daten und Quellen:
|
Artikelverzeichnis
editor@os2voice.org
< Vorherige Seite | Inhaltsverzeichnis | Nächste Seite >
VOICE-Homepage: http://de.os2voice.org