Inhalt
A Einführung
B HTML für PHP
C Strukturierte Programmierung mit PHP
D Bearbeitung von Formularen
E Datenbanken mit MySQL
F Programmierung von MySQL–Datenbanken mit PHP
G Text-Dateien
H Arrays
I Mathematische Funktionen
J Zeichenketten-Funktionen
K Neu in PHP 4
L HTML
M Anhang
N Lösungen
Index
Download (ca. 3,4 MB)
<< zurück | Galileo Computing / <openbook> / PHP 4 | vor >>
PHP 4 von Thomas Theis Webserver-Programmierung für Einsteiger
| Kapitel E Datenbanken mit MySQL
|  | E.1 MySQL: Installation und Start
|  | E.2 MySQL: Struktur von Datenbank und Tabelle
|  | E.3 MySQL, Datensätze bearbeiten
|  | E.4 Eindeutigkeit von Datensätzen, Index
|  | E.5 Hilfsmittel für MySQL-Datenbanken
|  | E.6 Alle MySQL-Befehle
# Kapitel E Datenbanken mit MySQL In diesem Abschnitt werden die Grundlagen des Aufbaus und der Struktur von Datenbanken anhand des MySQL-Datenbank-Servers beschrieben. Im Zusammenhang mit PHP werden sehr häufig MySQL-Datenbanken verwendet. Datenbank, Tabelle Eine Datenbank dient zur Speicherung größerer Datenmengen und zur übersichtlichen Darstellung bestimmter Daten aus diesen Datenmengen. Innerhalb einer Datenbank befinden sich verschiedene Tabellen, hier eine einfache Beispiel-Tabelle:
Name | Vorname | Personalnummer | Gehalt | Geburtstag
Maier | Hans | 6714 | 3500,00 | 15.03.62
Schmitz | Peter | 81343 | 3750,00 | 12.04.58
Mertens | Julia | 2297 | 3621,50 | 30.12.59
Feld, Datensatz Die Begriffe in der ersten Zeile nennt man die Datenfelder der Tabelle. Anschließend folgen die einzelnen Datensätze der Tabelle, in diesem Falle drei. Struktur, Daten Natürlich legt niemand für drei Datensätze eine Datenbank mit einer Tabelle an, aber die vorliegende Struktur könnte auch für mehrere tausend Datensätze verwendet werden. Die Datenfelder haben einen bestimmten Datentyp, hier sind dies Text, Zahlen und Datumsangaben. Beim Erzeugen einer Datenbank geht man wie folgt vor:
| Anlegen der Datenbank
| Anlegen von Tabellen durch Angabe der Struktur
| Eingeben der Datensätze in die Tabellen
Struktur-Änderung Die Struktur einer existierenden Datenbank bzw. einer Tabelle kann auch noch verändert werden, wenn sich bereits Daten darin befinden. Allerdings ist es empfehlenswert, sich vorher gründlich Gedanken über die Struktur einer Datenbank zu machen, da bei einer nachträglichen Veränderung leicht Datenverluste auftreten können. ## E.1 MySQL: Installation und Start ### E.1.1 Datenbanken mit MySQL SQL, MySQL Im Zusammenhang mit der Programmiersprache PHP wird häufig mit MySQL-Datenbanken gearbeitet. MySQL ist ein SQL-basierter Datenbank-Server. SQL ist die meistverwendete Datenbanksprache der Welt. MySQL bietet SQL-Anweisungen
| zur Erzeugung der Struktur von Datenbanken und Tabellen,
| zum Bearbeiten der Datensätze (Erzeugen, Anzeigen, Ändern, Löschen).
MySQL und PHP Der Entwickler einer Datenbank legt normalerweise die Struktur mittels MySQL an und stellt dem Benutzer zur komfortablen Bearbeitung der Datensätze HTML-Dateien mit PHP-Programmen zur Verfügung. Dies ist auch in den folgenden Abschnitten berücksichtigt worden:
| Zunächst werden die wichtigsten SQL-Anweisungen zur Benutzung von MySQL und zur Erzeugung bzw. Veränderung der Struktur einer Datenbank mit MySQL beschrieben.
| Es folgen die SQL-Anweisungen zum Erzeugen, Anzeigen, Ändern und Löschen von Datensätzen mit MySQL.
| Diese Anweisungen werden dann später (in sehr ähnlicher Form) in den PHP-Programmen zur komfortablen Benutzung der Datenbanken eingesetzt.
#### MySQL installieren unter Windows MySQL unter Windows Bei der Installierung gilt es, zunächst die Datei mysql-shareware-3.22.33-win.zip entpacken, anschließend die Datei setup.exe aufzurufen und den Installationsanweisungen zu folgen, das Ziel-Verzeichnis heißt c:\mysql. #### MySQL installieren unter Linux MySQL unter Linux Nach der im ersten Abschnitt vorgenommenen Installation des »Suse Systems für Netzwerkserver«, die für die PHP-Programmierung benötigt wird, ist MySQL bereits vorinstalliert. Die Anweisung mysql_install_db (im Verzeichnis /usr/bin) muss einmalig aufgerufen werden. Dadurch werden MySQL-eigene Datenbanken zu Verwaltungszwecken installiert. Falls man versehentlich diese Anweisung später noch einmal aufruft, hat dies keine Nachteile für die bisher erzeugten Datenbanken. Sie werden nicht verändert oder beeinflusst. #### MySQL-Server starten und beenden unter Windows Server starten unter Windows Nach erfolgter Installation (z. B. in das Verzeichnis c:\mysql) geht man in den DOS-Eingabemodus (über Startmenü|Programme|MS-DOS-Eingabeaufforderung). Dort muß man in das Verzeichnis c:\mysql\bin wechseln. Hier kann der MySQL-Datenbank-Server durch die Anweisung mysqld-shareware gestartet werden. Nach der Verwendung sollte man den Datenbank-Server mit der Anweisung mysqladmin -u root shutdown wieder herunterfahren und kann den DOS-Eingabemodus mit Hilfe von exit wieder beenden. Falls später ein PHP-Programm auf eine vorhandene MySQL-Datenbank zugreift, muss der MySQL-Datenbank-Server (mit mysqld-shareware) vorher gestartet werden. Er sollte anschließend auch beendet werden. Ein Tipp: Erzeugen Sie mit Hilfe eines Text-Editors die folgenden zwei Dateien:
| die Datei MySQLStart.bat, in der die beiden Anweisungen c:\mysql\bin\mysqld-shareware und c:\mysql\bin\mysqlshow stehen
| die Datei MySQLStop.bat, in der die Anweisung c:\mysql\bin\mysqladmin -u root shutdown steht
Erstellen Sie je eine Verknüpfung auf die beiden Dateien, und legen Sie diese Verknüpfung auf den Desktop. Auf diese Weise kann der Datenbank-Server einfach mit Doppelklick gestartet und beendet werden. Zusätzlich werden Ihnen noch beim Start mit Hilfe von mysqlshow die vorhandenen Datenbanken angezeigt. Das Ergebnis für den Aufruf von mysqlshow sieht nach einer Neu-Installation von MySQL wie folgt aus:
    Databases
    mysql
#### MySQL-Server starten und beenden unter Linux Server starten unter Linux Zunächst sollte man in das Verzeichnis /usr/bin wechseln. Der MySQL-Datenbank-Server kann nun durch die Anweisung safe_mysqld & gestartet werden. Nach der Verwendung sollte man den Datenbank-Server mit der Anweisung mysqladmin -u root shutdown wieder herunterfahren. Falls später ein PHP-Programm auf eine vorhandene MySQL-Datenbank zugreift, muss der MySQL-Datenbank-Server (mit safe_mysqld &) vorher gestartet werden. Er sollte anschließend auch beendet werden. ### E.1.2 Der MySQL-Monitor MySQL-Monitor Nach erfolgtem Start des MySQL-Datenbank-Servers wechselt man mit der Anweisung mysql in den Monitormodus für MySQL. Es erscheint das MySQL-Prompt. Hier können u. a. die Anweisungen zur Erzeugung von Datenbanken und Tabellen eingegeben werden. Die Eingabe von quit beendet den Monitormodus von MySQL. Der Start des Monitormodus sieht unter Windows wie folgt aus:
    c:\mysql> cd bin
    c:\mysql\bin> mysql
    Welcome to the MySQL-Monitor. Commands end with ; or \g
    Your MySQL Connection id is 26 to server version:
    3.22.29-shareware-debug
    Type 'help' for help
    mysql>
## E.2 MySQL: Struktur von Datenbank und Tabelle ### E.2.1 Datenbank erzeugen, benutzen, löschen Nach dem Aufruf des MySQL-Monitors können die nachfolgend an Beispielen gezeigten SQL-Anweisungen zur Datenbankverwaltung eingesetzt werden. create database #### Datenbank erzeugen
    create database firma;
| Die Datenbank mit dem Namen firma wird erzeugt.
| Falls die Datenbank neu erzeugt wurde, so erscheint die Ausgabe Query OK, 1 row affected und eine Zeitangabe.
| Falls sie aber schon existiert und zumindest eine Tabelle besitzt, erfolgt die Fehlermeldung Error 1007: Can't create database 'firma'. Database exists.
use #### Datenbank benutzen
    use firma;
| Wechselt auf die Datenbank firma. Dies ist zur weiteren Benutzung dieser Datenbank notwendig.
| Es erscheint die Meldung Database changed.
drop database #### Datenbank löschen
    drop database firma;
| Löscht die gesamte Datenbank inkl. aller Tabellen und Datensätze. Dieser Befehl sollte nur in Ausnahmefällen angewendet werden!
#### Datenbanken allgemein Nachdem die Datenbank firma mit create database erzeugt wurde, kann man später den MySQL-Monitor auch mit mysql firma starten. Die genannte Datenbank ist dann bereits in Benutzung. Bei den Namen von Datenbanken, Tabellen und Feldern sollte man darauf achten, dass keine deutschen Umlaute, scharfes ß, Leerzeichen und Sonderzeichen verwendet werden. Zugriffs-Rechte Innerhalb von MySQL kann mit einem umfangreichen und detaillierten System zur Zugriffssicherung gearbeitet werden. Verschiedenen Benutzern können spezifische Rechte eingeräumt bzw. verwehrt werden. Zum Erlernen des ersten Umgangs mit Datenbanken und der Datenbank-Programmierung wird hier vereinfacht angenommen, daß die Benutzer sämtliche Zugriffsrechte bei der Benutzung von Datenbanken haben. ### E.2.2 Tabelle erzeugen create table Nach Erzeugung einer Datenbank können Tabellen angelegt werden. Eine neue Tabelle wird mit Hilfe der SQL-Anweisung create table erzeugt. Ein Beispiel:
    create table personen
    (
       name char(30),
       vorname char(25),
       personalnummer int,
       gehalt double(10,2),
       geburtstag date
    );
Damit wird eine neue Tabelle mit dem Namen personen erzeugt. Diese Tabelle enthält fünf Felder mit den folgenden Feldnamen und Datentypen:
Feldname | Datentyp | Bedeutung des Datentyps
name | char(30) | Zeichenkette der Länge 30
vorname | char(25) | Zeichenkette der Länge 25
personalnummer | int | ganze Zahlen (im Bereich von –2 147 483 648 bis 2 147 483 647)
gehalt | double(10,2) | Zahlen mit Nachkommastellen, maximale Breite der Anzeige ist 10, die Zahl ist auf zwei Nachkommastellen genau
geburtstag | date | Datumsangaben
Datentypen Bei diesem Beispiel wurden einige häufig verwendete Datentypen eingesetzt, die für viele Anwendungen bereits ausreichen. Zum Einsatz weiterer Datentypen und Feldeigenschaften wird an dieser Stelle auf das Manual zu MySQL (auf der CD) verwiesen. ### E.2.3 Tabelle komprimieren, löschen optimize table Beim Löschen von Datensätzen werden die betroffenen Datensätze nur als »gelöscht« markiert, aber nicht physikalisch gelöscht. Die Tabelle und damit die Datenbank wird durch neue Einträge ständig größer. Hier kann die Anweisung optimize table Abhilfe schaffen. Dadurch werden alle Datensätze, die als »gelöscht« markiert sind, auch physikalisch gelöscht. Die Datenbank kann somit spürbar verkleinert werden. Für die o. a. Tabelle würde die Anweisung lauten:
    optimize table personen;
drop table Eine gesamte Tabelle inkl. aller Datensätze kann mit Hilfe von drop table gelöscht werden. Für die o. a. Tabelle würde die Anweisung lauten:
    drop table personen;
| Dieser Befehl sollte nur in Ausnahmefällen angewendet werden!
### E.2.4 Tabellenstruktur ändern alter table Sollte man feststellen, dass eine Tabelle mit einer nicht ausreichenden oder falschen Struktur erzeugt wurde, so kann diese Struktur mit Hilfe der SQL-Anweisung alter table geändert werden. Je nach Änderung können Verluste bei den bereits eingegebenen Daten auftreten. Darauf wird gesondert hingewiesen. Einige Beispiele: rename #### Name einer Tabelle ändern
    alter table personen
       rename adr;
Der Name der Tabelle personen wird in adr geändert. change #### Name eines Feldes ändern
    alter table personen
       change vorname vname char(25);
Der Name des Feldes vorname in der Tabelle personen wird auf vname geändert. Dieses Feld hat den Datentyp char(25), ohne Angabe des Datentyps kann die Änderung nicht durchgeführt werden. #### Länge eines Feldes ändern
    alter table personen
       change vorname vorname char(35);
| Die Länge des Feldes vorname in der Tabelle personen wird auf 35 Zeichen geändert (vorher 25). Der Feldname muß doppelt angegeben werden. Bei einer Verkleinerung (z. B. von 25 auf 15 Zeichen) können Daten verloren gehen!
add #### Feld hinzufügen
    alter table personen
       add gehalt double;
Das Feld gehalt vom Typ double wird der Tabelle personen hinzugefügt. #### Typ eines Feldes ändern
    alter table personen
       change gehalt gehalt int;
| Der Typ des Feldes gehalt aus der Tabelle personen wird auf int geändert (vorher double). Der Feldname muß doppelt angegeben werden. Bei einer Veränderung des Typs können Daten verloren gehen (hier sind dies die Nachkommastellen)!
drop #### Feld löschen
    alter table personen
       drop gehalt;
| Das Feld gehalt der Tabelle personen wird gelöscht. In allen Datensätzen gehen die Daten dieses Feldes verloren!
### E.2.5 Informationen über Datenbanken und Tabellen anzeigen Falls man nicht weiß, welche Datenbanken und Tabellen bereits existieren bzw. wie eine Tabelle aufgebaut ist, dann kann man auf die SQL-Anweisung show zurückgreifen. Einige Beispiele: show databases #### Alle Datenbanken anzeigen
    show databases;
alle Datenbanken innerhalb von MySQL anzeigen show tables #### Alle Tabellen anzeigen
    show tables from firma;
alle Tabellen der Datenbank firma anzeigen show columns #### Alle Felder anzeigen
    show columns from personen from firma;
alle Felder der Tabelle personen der Datenbank firma anzeigen. Der optionale Zusatz from database (hier from firma) kann weggelassen werden, falls eine Datenbank schon zur Benutzung geöffnet wurde (z. B. mit use). ## E.3 MySQL, Datensätze bearbeiten ### E.3.1 Datensätze erzeugen insert, values Nehmen wir an, die Struktur der Tabelle personen entspräche dem Original, das mit create table erzeugt wurde (s. oben). Ein neuer, vollständiger Datensatz für diese Tabelle mit den Feldern name, vorname, personalnummer, gehalt und geburtstag kann dann wie folgt erzeugt werden:
    insert personen values
    (
       'Maier',
       'Hans',
       21398,
       2850.90,
       '1960-12-20'
    );
Dabei ist Folgendes zu beachten:
| Die Reihenfolge der Feldinhalte in den Klammern hinter values muss der Reihenfolge der erzeugten Felder entsprechen.
| Zeichenketten und Datumsangaben müssen in einfache Hochkommata (Apostroph) gesetzt werden.
| Die Datumsangabe muss im amerikanischen Format erfolgen (JJJJ-MM-TT).
| Bei Zahlen mit Nachkommastellen ist ein Punkt statt eines Kommas zu verwenden (wie bei PHP).
Falls nicht alle Feldinhalte besetzt werden sollen oder die Original-Reihenfolge der Felder nicht beachtet werden soll, kann man auch folgende Form benutzen:
    insert personen
    (
       name,
       gehalt
    )
    values
    (
       'Schmitz',
       3950.90
    );
Dabei erfolgt eine genaue Zuordnung der neuen Werte zu den genannten Feldern. Die Felder vorname, personalnummer und geburtstag bleiben zunächst leer. Sie sind mit NULL besetzt und können später noch gefüllt werden. NULL bedeutet weder die Zahl 0 noch eine leere Zeichenkette, sondern lediglich »kein Eintrag”! ### E.3.2 Datensätze auswählen und anzeigen select, from, * Die SQL-Anweisung select wird mit Abstand am häufigsten verwendet und dient zur Durchführung einer Datenbank-Abfrage. Es findet eine Auswahl von Datensätzen, die angezeigt werden sollen, statt. Einige Anwendungsbeispiele: select * from personen; Alle Felder (*) und alle Datensätze der Tabelle personen werden angezeigt. select name, vorname from personen; Die Inhalte der Felder name und vorname aller Datensätze der Tabelle personen werden angezeigt. where select * from personen where gehalt = 3000; Alle Felder und alle Datensätze der Tabelle, bei denen im Feld gehalt der Wert 3000 steht, werden angezeigt. Hochkommata select * from personen where name = 'Maier'; Alle Felder und alle Datensätze der Tabelle, bei denen im Feld name ’Maier’ steht, werden angezeigt. Zu beachten sind die Hochkommata! select * from personen where geburtstag = '1962-1-5'; Alle Felder und alle Datensätze der Tabelle, bei denen im Feld geburtstag der 5.1.1962 steht, werden angezeigt. Zu beachten sind die Hochkommata und die Reihenfolge JJJJ-MM-TT! is null select * from personen where vorname is null; Alle Felder und alle Datensätze der Tabelle, bei denen im Feld vorname noch kein Eintrag erfolgte, werden angezeigt. #### Übung UE01 Erstellen Sie eine Datenbank für Computer-Hardware. Innerhalb dieser Datenbank soll es eine Tabelle für Festplatten mit folgendem Aufbau und Inhalt geben:
Hersteller | Typ | MB | Preis | Artikel-nummer | Datum der ersten Produktion
Quantum | Fireball CX | 6400 | 215,00 | HDA-208 | 1.10.97
Quantum | Fireball Plus | 9100 | 269,00 | HDA-163 | 15.3.98
Fujitsu | MPE 3136 | 13600 | 275,00 | HDA-171 | 1.9.98
Seagate | 310232A | 10200 | 245,00 | HDA-144 | 15.11.97
IBM | DJNA 372200 | 22000 | 455,00 | HDA-140 | 15.6.98
Gehen Sie dazu wie folgt vor:
| Installieren Sie MySQL (falls noch nicht geschehen).
| Starten Sie den MySQL-Datenbank-Server.
| Rufen Sie den MySQL-Monitor auf.
| Verwenden Sie create database zum Erzeugen der Datenbank.
| Wechseln Sie zu dieser Datenbank mit use.
| Erzeugen Sie mit create table eine Tabelle mit sechs Feldern eines geeigneten Typs.
| Geben Sie mit insert den ersten Datensatz ein.
| Kontrollieren Sie mit select die korrekte Eingabe der Struktur und des ersten Datensatzes.
| Nehmen Sie gegebenenfalls mit alter table Änderungen an der Struktur vor.
| Geben Sie die restlichen Datensätze mit insert ein.
| Kontrollieren Sie mit select die korrekte Eingabe der gesamten Tabelle.
| Beenden Sie den MySQL-Monitor.
| Fahren Sie den MySQL-Datenbank-Server wieder herunter.
Sollten Sie Fehler bei der Eingabe der Datensätze gemacht haben, so können Sie diese später noch verändern oder löschen. ### E.3.3 Vergleichs-Operatoren, logische Operatoren Vergleichs-Operatoren Bei der Auswahl durch where innerhalb der select-Anweisung (und später auch in anderen Anweisungen) können, ähnlich wie bei der Programmierung mit PHP, die nachfolgenden Vergleichs-Operatoren angewendet werden:
Operator | Bedeutung
= | gleich
<> | ungleich
> | größer als
>= | größer als oder gleich
< | kleiner als
<= | kleiner als oder gleich
Logische Operatoren Es können auch mehrere Auswahlbedingungen logisch miteinander verknüpft werden, und zwar mit Hilfe der folgenden logischen Operatoren:
Operator | Bedeutung
not | Der Wahrheitswert einer Bedingung wird umgekehrt.
and | Alle Bedingungen müssen zutreffen.
or | Eine der Bedingungen muss zutreffen.
Es folgt ein Beispiel für die Anwendung von Vergleichsoperatoren und logischen Operatoren. Die nachfolgende Auswahl ergibt alle Datensätze, bei denen im Feld gehalt ein Wert zwischen 3000 und 3500 steht:
    select * from personen
       where gehalt >= 3000 and gehalt <= 3500;
### E.3.4 Vergleichsoperator like like, %, _ Der Operator like ist sehr nützlich beim Suchen nach Zeichenketten oder Teilen von Zeichenketten. Dabei können auch Platzhalter (Wildcards) eingesetzt werden. Ein % (Prozentzeichen) steht für eine beliebige Anzahl von unbekannten Zeichen, ein _ (Unterstrich) steht für genau ein unbekanntes Zeichen. Die untersuchte Zeichenkette muss dabei nach wie vor in einfache Hochkommata gesetzt werden. Einige Beispiele: select * from fp where typ like 'a%'; Alle Felder und alle Datensätze der Tabelle werden angezeigt, deren Eintrag im Feld typ mit »a« oder »A« beginnt. select * from fp where typ like '%a'; Alle Felder und alle Datensätze der Tabelle werden angezeigt, deren Eintrag im Feld typ mit »a« oder »A« endet. select * from fp where typ like '%a%'; Alle Felder und alle Datensätze der Tabelle werden angezeigt, deren Eintrag im Feld typ ein »a« oder »A« beinhaltet. select * from fp where typ like 'D_NA%'; Alle Felder und alle Datensätze der Tabelle werden angezeigt, deren Eintrag im Feld typ mit »D(beliebiges Zeichen)NA« beginnt. Dies gilt unabhängig von Groß- und Kleinschreibung. Angezeigt werden also z. B. DJNA..., DTNA..., aber nicht DTTA... ### E.3.5 Sortierung order by, desc Zusätzlich läßt sich die Reihenfolge der Ausgabe mit Hilfe von order by beeinflussen. Die folgende SQL-Anweisung sortiert die Ausgabe nach Gehalt, beginnend mit dem größten Gehalt:
    select * from personen
       order by gehalt desc;
Der Zusatz desc steht für descending (=absteigend). Im Normalfall wird aufsteigend sortiert, der Zusatz asc für ascending (=aufsteigend) muss deshalb nicht gesondert erwähnt werden. #### Übung UE02 Führen Sie zu der Hardware-Datenbank, die mit der vorherigen Übung erzeugt wurde, verschiedene Abfragen durch. Es sollen alle Festplatten angezeigt werden, die folgende Kriterien erfüllen:
| des Herstellers Quantum, mit allen Angaben
| mit einer Kapazität von mehr als 10 000 MB, nur mit den Angaben Hersteller, Typ, MB
| mit einem Preis von weniger als 300 DM, nur mit den Angaben Hersteller, Preis, Artikelnummer, nach Preis aufsteigend sortiert
| mit einer Kapazität von mehr als 10 000 MB, die weniger als 300 DM kosten, mit allen Angaben, nach MB absteigend sortiert
| deren Typbezeichnung mit »Fire« beginnt, mit allen Angaben
| in deren Typbezeichnung »CX« vorkommt, mit allen Angaben
| die nach dem 1.1.98 erstmalig produziert wurden, mit allen Angaben
| die im ersten Halbjahr 1998 erstmalig produziert wurden, mit allen Angaben
### E.3.6 Datensätze ändern update, set Die SQL-Anweisung update dient zur Änderung von einem oder mehreren Feldinhalten in einem oder mehreren vorhandenen Datensätzen. Sie ähnelt vom Aufbau her der select-Anweisung. Man sollte unbedingt darauf achten, dass die Auswahlkriterien sorgfältig gewählt werden, da ansonsten evtl. nicht nur die gewünschten Datensätze verändert werden. Einige Beispiele: #### Absolute Änderung update fp set preis = 300 where hersteller = 'IBM'; Bei allen Datensätzen, deren Eintrag im Feld Hersteller ’IBM’ lautet, wird der Preis auf den Wert 300 gesetzt. #### Relative Änderung (mit Berechnungsformel) update fp set preis = preis * 1.1 where hersteller = 'IBM'; Bei allen Datensätzen, deren Eintrag im Feld Hersteller ’IBM’ lautet, wird der Preis um 10% erhöht. #### Mehrere Änderungen gleichzeitig update fp set preis = 300, hersteller = 'IBM Corp.' where hersteller = 'IBM'; Bei allen Datensätzen, deren Eintrag im Feld Hersteller 'IBM' lautet, wird der Preis auf 300 und der Eintrag im Feld Hersteller auf 'IBM Corp.' gesetzt. ### E.3.7 Datensätze löschen delete Die SQL-Anweisung delete dient zum Löschen von einem oder mehreren vorhandenen Datensätzen. Sie ähnelt ebenfalls vom Aufbau her der select-Anweisung und sollte sehr umsichtig eingesetzt werden, da ansonsten evtl. nicht nur die gewünschten Datensätze gelöscht werden. Nachdem z. B. zu einem früheren Zeitpunkt mit der folgenden Anweisung ein Datensatz eingefügt wurde:
    insert fp
    (
       hersteller,
       typ,
       artnummer
    )
    values
    (
       'Western Digital',
       'WD-102AA',
       'HDA-178'
    );
könnte dieser Datensatz wieder gelöscht mit:
    delete from fp
       where artnummer = 'HDA-178';
Es empfiehlt sich, dabei ein möglichst eindeutiges Kriterium zu verwenden, da ansonsten nicht nur die gewünschten Datensätze gelöscht werden. Im vorliegenden Falle ist dies die Artikelnummer. Falls man unvollständige oder leere Datensätze einer Tabelle hinzugefügt hat, so kann man sie z. B. mit folgender Anweisung löschen:
    delete from fp
       where hersteller is null;
Diese Anweisung löscht alle Datensätze, die keinen Eintrag im Feld hersteller haben. #### Übung UE03 Führen Sie in der Hardware-Datenbank aus den vorherigen Übungen folgende Änderungen bzw. Löschungen durch:
| Alle Festplatten des Herstellers Seagate sollen um 25 DM teurer werden.
| Der Hersteller Fujitsu hat seine Festplatte MPE 3136 ersetzt durch die Festplatte MPE 3139 mit einer Kapazität von 13900 MB. Führen Sie die notwendige Änderung durch.
| Alle Festplatten des Herstellers Quantum sollen um 8 % teurer werden.
| Der Hersteller IBM hat seine Produktion eingestellt. Entfernen Sie die betreffenden Festplatten aus Ihrem Angebot.
| Löschen Sie alle versehentlich eingetragenen Datensätze. Das Kriterium für einen solchen Datensatz soll sein: Der Datensatz hat keine Artikelnummer.
Zur Kontrolle: Nach den Änderungen auf der Basis der Originaldaten (siehe erste Übung) sollte die Datenbank folgendes Aussehen haben:
Hersteller | Typ | MB | Preis | Artikel-nummer | Datum der ersten Produktion
Quantum | Fireball CX | 6400 | 232,20 | HDA-208 | 1.10.97
Quantum | Fireball Plus | 9100 | 290,52 | HDA-163 | 15.3.98
Fujitsu | MPE 3139 | 13900 | 275,00 | HDA-171 | 1.9.98
Seagate | 310232A | 10200 | 270,00 | HDA-144 | 15.11.97
## E.4 Eindeutigkeit von Datensätzen, Index Indizierung Für viele Vorgänge innerhalb von Tabellen ist eine eindeutige Identifizierung der einzelnen Datensätze hilfreich und notwendig. Dies wird mit Hilfe eines sogenannten »eindeutigen Index« realisiert. Dieser Index kann unmittelbar beim Erzeugen einer neuen Tabelle geschaffen werden (mit create table). Er kann aber auch einer vorhandenen Tabelle, die bereits Daten beinhaltet, hinzugefügt werden (mit alter table). Es empfiehlt sich allerdings, sich bereits vor Erzeugung der Tabelle zu überlegen, welches Feld eindeutige Daten beinhaltet, und die Tabelle mit eindeutigem Index zu erzeugen. ### E.4.1 Neue Tabelle mit Index erzeugen index, unique Die Erzeugung einer Tabelle mit einem eindeutigen Index wird an folgendem Beispiel gezeigt:
    create table p
    (
       nachname char(30),
       nummer int not null,
       index (nummer),
       unique (nummer)
    );
Diese SQL-Anweisung erzeugt eine Tabelle mit dem Namen p und den zwei Feldern nachname und nummer. Das Feld nummer ist vom Typ int (für ganze Zahlen). Neue Datensätze müssen für dieses Feld einen Eintrag erhalten, dies ist mit dem Zusatz not null festgelegt worden. Dieser Zusatz ist für den Index notwendig. Mit index (nummer) wird ein Index auf dem Feld nummer erzeugt. Der Index bekommt auch den Namen nummer und wird mit unique (nummer) zu einem eindeutigen Index. Anschließend können in dieser Tabelle nur noch Einträge aufgenommen werden, die einen Eintrag im Feld nummer haben. Dieser Eintrag darf nicht bereits in einem anderen Datensatz existieren, da ansonsten die Eindeutigkeit verletzt wäre. Alle Datensätze können anhand des Wertes im Feld nummer eindeutig voneinander unterschieden werden. Dies ist besonders beim Ändern und Löschen von Datensätzen wichtig. Primary Key Mit Hilfe der Anweisung show columns from p; kann man sich die Struktur der Tabelle anschauen. Beim Feld nummer ist in der Spalte Key der Eintrag PRI zu sehen. Dies bedeutet, daß für diese Spalte der Primary Key erzeugt wurde. Der Primary Key ist ein eindeutiger Index. ### E.4.2 Index zu vorhandener Tabelle hinzufügen Einer vorhandenen Tabelle kann ein Index hinzugefügt werden. Dazu sind mehrere Schritte notwendig. Nehmen wir an, die Tabelle wäre mit der folgenden SQL-Anweisung erzeugt worden:
    create table p
    (
       nachname char(30),
       nummer int
    );
Zunächst muß das Feld nummer nachträglich auf die Eigenschaft not null geändert werden. Dabei sollte vorher darauf geachtet werden, daß in keinem der vorhandenen Datensätze ein leerer Eintrag im Feld nummer existiert, ansonsten treten Fehler bei der Veränderung der Feldeigenschaften auf. Die SQL-Anweisung für diese Änderung lautet: alter ... change not null
    alter table p
       change nummer nummer int not null;
Anschließend kann ein eindeutiger Index für das Feld nummer erzeugt werden. Darüber hinaus sollte darauf geachtet werden, daß im Feld nummer kein Eintrag mehr als einmal existiert, ansonsten wird der eindeutige Index nicht erzeugt. Die SQL-Anweisung für die Änderung lautet: alter ... add unique
    alter table p
       add unique (nummer);
Man sollte sich mit Hilfe von show columns from p; davon überzeugen, daß der Primary Key für das Feld nummer existiert. ### E.4.3 Index löschen Sollte man versehentlich das falsche Feld für einen eindeutigen Index gewählt haben, so lässt er sich mit der folgenden SQL-Anweisung wieder entfernen (für o. a. Beispiel):
    alter table p
       drop primary key;
Falls man darüber hinaus für dieses Feld auch leere Einträge erlauben möchte, muss die betreffende Feld-Eigenschaft noch geändert werden:
    alter table p
       change nummer nummer int null;
#### Übung UE04 Erzeugen Sie für die Tabelle personen in der Datenbank firma einen eindeutigen Index auf dem Feld personalnummer. Lassen Sie sich vorher alle Datensätze anzeigen, und nehmen Sie gegebenenfalls notwendige Änderungen bezüglich der Inhalte des Feldes personalnummer vor. Überzeugen Sie sich anschließend davon, dass der eindeutige Index erzeugt wurde: Versuchen Sie einen Datensatz einzutragen, der einen bereits vorhandenen Eintrag im Feld personalnummer hat. #### Übung UE05 Erzeugen Sie für die Tabelle fp in der Datenbank hardware einen eindeutigen Index auf dem Feld artnummer. Lassen Sie sich vorher alle Datensätze anzeigen, und nehmen Sie gegebenenfalls notwendige Änderungen bezüglich der Inhalte des Feldes artnummer vor. Überzeugen Sie sich anschließend davon, dass der eindeutige Index erzeugt wurde: Versuchen Sie einen Datensatz einzutragen, der einen bereits vorhandenen Eintrag im Feld artnummer hat. ## E.5 Hilfsmittel für MySQL-Datenbanken PHPMyAdmin Ein nützliches Hilfsmittel zur übersichtlichen Administration von umfangreicheren Datenbanken ist das Programm PHPMyAdmin von Tobias Ratschiller. Es steht unter der Adresse http://www.phpwizard.net/phpMyAdmin als Freeware-Tool zur Verfügung. WinMySQL Auf der CD befindet sich WinMySQL, ein visuelles Tool zur Durchführung von SELECT-Abfragen von Alexandre Gouverneur. ## E.6 Alle MySQL-Befehle Alle MySQL-Befehle Im vorliegenden Abschnitt werden eine ganze Reihe von Befehlen für MySQL eingesetzt. Zur besseren Übersicht schließt sich eine Liste aller Befehle mit einer kurzen Erläuterung derselben an. Weitergehende Ausführungen finden sich im MySQL-Manual.
Funktionsname | Erläuterung
alter table | Ändern der Struktur einer Tabelle
create database | Erzeugen einer Datenbank
create function | Erzeugen einer benutzerdefinierten Funktion
create index | Erzeugen eines Index in einer Tabelle
create table | Erzeugen einer Tabelle
delete | Löschen von Datensätzen
describe | zeigt das Ergebnis, das eine Auswahl mit select erzeugen würde (s. explain)
drop database | Löschen einer Datenbank
drop function | Löschen einer benutzerdefinierten Funktion
drop index | Löschen eines Index in einer Tabelle
drop table | Löschen einer Tabelle
explain | zeigt das Ergebnis, das eine Auswahl mit select erzeugen würde (s. describe)
flush | Löschen von MySQL-internen Caches
grant | Vergabe von Benutzerrechten innerhalb einer Datenbank
insert | Erzeugen von neuen Datensätzen
join | dient zur Auswahl von Datensätzen aus mehreren Tabellen mit select
kill | Löschen eines Threads, in dem eine MySQL-Verbindung aktiv ist
load data | Erzeugen von neuen Datensätzen durch Einlesen aus einer Textdatei
lock tables | Sperren von Tabellen im aktiven Thread
optimize table | Optimieren einer Tabelle, Freigabe von nicht mehr genutztem Speicherplatz
replace | Ersetzen von Datensätzen durch neue Datensätze
revoke | Rücknahme von Benutzerrechten innerhalb einer Datenbank
select | Auswahl von Datensätzen
set option | Setzen von Optionen der aktuellen Datenbank-Verbindung
show columns | Anzeige der Felder einer Tabelle
show databases | Anzeige der Namen aller Datenbanken von MySQL
show grants | Anzeige aller Rechte eines Benutzers der Datenbank
show index | Anzeige der Indizes einer Tabelle
show processlist | Anzeige aller Threads, in denen eine MyQSL-Verbindung aktiv ist
show status | Anzeige von Status-Informationen des MySQL-Datenbankservers
show table status | Anzeige von Informationen zu den Tabellen einer Datenbank
show tables | Anzeige der Namen aller Tabellen einer Datenbank
show variables | Anzeige des Wertes der MySQL-System-Variablen
unlock tables | Rücknahme der Sperrung von Tabellen im aktiven Thread
update | Ändern von Datensätzen
use | Benutzen einer Datenbank, Wechseln zu einer Datenbank
<< zurück | <top> | vor >>
Zum Katalog
PHP 4 bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung

Noch Fragen?
Tauschen Sie sich mit anderen Lesern aus Zum Forum

Empfehlung
| PHP 4-Workshop

Neue Bücher
Einstieg in Python JavaScript (4. Aufl.) CSS Praxis Einstieg in XML

Empfehlung
| MySQL 4

Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

MyGalileo
Der Service für registrierte Leser: Info

Copyright © Galileo Press GmbH 2001 - 2002
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken und speichern. Ansonsten unterliegt das <openbook> denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
Die Veröffentlichung der Inhalte oder Teilen davon bedarf der ausdrücklichen schriftlichen Genehmigung von Galileo Press. Falls Sie Interesse daran haben sollten, die Inhalte auf Ihrer Website oder einer CD anzubieten, melden Sie sich bitte bei: stefan.krumbiegel@galileo-press.de

[Galileo Computing]
Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, fon: 0228.42150.0, fax 0228.42150.77, info@galileo-press.de