Web Technologien –
Klassische Datenbanken am
Beispiel von MySQL
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Chair in Information and Service Systems
Department of Law and Economics
WS 2011/2012
Wednesdays, 8:00 – 10:00 a.m.
Room HS 021, B4 1
• Die Skriptsprache PHP
ermöglicht die Erstellung
komplexer Serverskripte, welche
Formulardaten, Sessions und
Cookies lesen und schreiben
können
15.11.11
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Server
• Der Linux, Apache, MySQL, PHP
Stack (= LAMP) ist eine
Sammlung von Open Source
Standardsoftware zur
Realisierung serverseitiger
dynamischer Websites
Client
Wrap-Up
Browser
PHP
Apache
, (Python, Perl)
MySQL
Linux
Slide 2
MySQL
• Am weitesten verbreitetes Open Source „Database
Management System“ (DBMS) der Welt
• Erstmals 1997 als Version 3.21 veröffentlicht um zu zeigen,
dass bereits viele Jahre der Erfahrung im Produkt stecken
• Die aktuellste Version 5.5.17 steht für eine Vielzahl
verschiedenster Betriebssysteme zur Verfügung
• Verfügbar in verschiedenen Versionen mit unterschiedlichem
Leistungsumfang, darunter die kostenfreie „Community Edition“
(siehe www.mysql.de)
15.11.11
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 3
Datenbank Management System
• Set aus Komponenten zur Definierung,
Erstellung und Verwaltung von
Datenbanken
• Datenbanken können Daten persistent
speichern, durchsuchen und verwalten
• Bei MySQL handelt es sich um ein
relationales Datenbanksystem (RDBMS)
• Relationale Datenbanken, nach dem
von Edgar F. Codd 1970 entwickelten
Modell, beinhalten teilweise
untereinander verknüpfte Tabellen zur
Speicherung von Daten
15.11.11
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Anwendung DBMS Datenbank-­‐
Dateien Datenbanksystem Slide 4
Aufgaben eines DBMS
• Datensicherheit im Sinne von Zugriffsrechten und
Datenverlust
• Transaktionen zur Ermöglichung von Rollbacks und zur
Sicherung der Datenintegrität
• Datenintegrität nach fest definierten Constraints (z.B. Foreign
Key)
• Anfrageoptimierung durch Bereitstellung einer Sprache
welche erst intern in logische Operationen übersetzt wird
• Anwendungsunterstützung durch Bereitstellung von Triggern
und gespeicherten Prozeduren
• Mehrbenutzerfähigkeit durch Berechtigungsvergabe und
Locking-Mechanismen
15.11.11
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 5
Tabellen in relationalen Datenbanken
Tabelle Kunden
Kundennummer
Name
Kundentyp
10000
Max Müller
0
10001
Franziska Maier
0
10002
Schmid und Söhne GmbH
1
Tabelle Kundentypen
15.11.11
TypID
Typbezeichnung
0
Privatkunde
1
Geschäftskunde
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 6
Terminologie
• Datenbank/Database:
Ein Behältnis zum Speichern von Daten
• Tabelle/Table:
Der Teil einer Datenbank die die Daten enthält. Eine Tabelle hat Spalten/
Columns zur Speicherung der zeilenweise abgelegten Daten mit ihren
Attributen.
• Spalten/Columns:
Jede Spalte enthält ein Attribut eines Datensatzes in einem festgelegten
Datentyp (string, integer, date etc.)
• Zeile/Row:
Der Datensatz/Record in einer Tabelle
• Primärschlüssel/Primary Key:
Eine oder mehrere Spalten, welche eindeutige Werte zur Referenzierung
eines Datensatzes enthalten
• Index:
Spalten welche häufig zur Filterung von Ergebnissen eingesetzt werden
können zum Performance-Gewinn als Indices markiert werden
15.11.11
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 7
SQL
• SQL ist die Standardsprache zur Interaktion mit relationalen
Datenbanken und entstand aus der bereits Anfang der 70er
entwickelten Sprache Sequel
• Verschiedene Datenbanksysteme haben ihren eigenen Dialekt
• SQL besteht aus Befehlen dreier Kategorien:
1. Data Definition Language (DDL) zur Verwaltung der
Datenbanken und deren Struktur
2. Data Manipulation Language (DML) zur Verwaltung der Daten
innerhalb einer Datenbank (à CRUD)
3. Data Control Language (DCL) zum Transaktionsmanagement
für „Locks“ and „Rollbacks“, zur Zugriffssteuerung und zur
Datenüberprüfung/-korrektur/-aufbereitung
15.11.11
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 8
Entwicklung eines Datenbankmodells
Kernfragen:
• Welche Tabellen benötige ich?
• Welche Spalten in den Tabellen benötige ich?
• Wie sehen die möglichen Beziehungen zwischen den verschiedenen
Datensätzen aus?
Hilfsmittel:
Entity-Relationship Model (ERM)
KN Straße 1
Name ... Tabelle Kunden
Kunde
n
hat
Adresse
Stadt ... (siehe Peter Chen, 1976)
15.11.11
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Kundennummer
Name
10000
Max Müller
10001
Franziska Maier
10002
Schmid und Söhne GmbH
Tabelle Adressen
AdressID
Kundennummer
Straße
0
10000
Hauptstraße
1
10000
Bahnhofsstraße
Slide 9
...
SQL Syntax
• Befehle müssen immer mit einem Strichpunkt terminiert
werden
• Bei Namen wird die Groß-/Kleinschreibung beachtet, bei
Befehlen nicht
• Namen von Datenbanken, Tabellen und Spalten müssen in
Akzentsymbole (`) eingefasst werden
• String-Werte müssen in einfache Anführungszeichen (')
eingefasst werden
select * from table `Kunden` where `Name`='Maier';
(weitere Datentypen unter http://dev.mysql.com/doc/refman/5.1/de/data-type-overview.html)
15.11.11
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 10
Anlegen von Datenbanken und Tabellen
(DDL)
SQL Kommandozeile
• Mit „create“ können Datenbanken
und Tabellen erstellt werden
• Mittels „use“ kann zwischen
Datenbanken gewechselt werden
• Bei der Tabellenerstellung muss jeder
Spalte ein Typ (int, varchar, boolean
etc.) zugewiesen werden
• Über weitere Schlüsselwörter können
z.B. ein Primärschlüssel oder
automatisch hochzählende Werte
definiert werden
• Mit „drop“ können Datenbanken und
Tabellen wieder gelöscht werden
mysql> create database `Shop`;
Query OK, 1 row affected (0.00 sec)
mysql> use `Shop`;
Database changed
mysql> create table `Kunden`
(`Kundennummer` INT NOT NULL
AUTO_INCREMENT,
`Name` VARCHAR(45),
PRIMARY KEY (`Kundennummer`));
Query OK, 0 rows affected (0.02 sec)
mysql> drop table `Kunden`;
Query OK, 0 rows affected (0.00 sec)
mysql> drop database `Shop`;
Query OK, 0 rows
affected (0.04 sec)
(weitere Datentypen unter http://dev.mysql.com/doc/refman/5.1/de/data-type-overview.html)
15.11.11
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 11
DDL und DCL mittels GUI Tools
15.11.11
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 12
Datensätze anlegen
SQL Kommandozeile
• Mit dem Befehl „insert into“ können
Datensätze in einer Datenbank
angelegt werden
• Ist ein Feld als
„AUTO_INCREMENT“ definiert wird
dieses automatisch mit dem
nächsthöheren Wert befüllt
• Felder die als „NOT NULL“ definiert
sind müssen befüllt werden
• Felder die als PRIMARY KEY oder
eindeutige Indices definiert sind
müssen die Eindeutigkeit in der
Tabelle einhalten
15.11.11
mysql> insert into `Shop`.`Kunden`
(`Name`, `Hausnummer`)
values
('Max Müller', 2);
Query OK, 1 row affected (0.00 sec)
oder alternativ
mysql> insert into `Shop`.Kunden
set
`Name`='Franziska Maier',
`Hausnummer`=5;
Query OK, 1 row affected (0.00 sec)
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 13
Datensätze abfragen
• Mit dem Befehl „select“ können in
einer Datenbank existierende
Datensätze abgefragt werden
• Der Befehl erwartet eine Angabe
welche Werte aus der
Ergebnismenge zurückgegeben
werden sollen; diese kann sein:
• „*“ für alle Ergebniswerte
• Eine kommagetrennte Liste aus
Spaltennamen
•
15.11.11
Der Befehl „select distinct“
schließt doppelte Ergebnisse in
der Ergebnismenge aus
SQL Kommandozeile
mysql> select * from `Shop`.`Kunden`;
+--------------+-----------------+------------+!
| Kundennummer | Name
| Hausnummer |
+--------------+-----------------+------------+!
|
1 | Max Müller
|
2 |!
|
2 | Franziska Maier |
5 |!
+--------------+-----------------+------------+!
2 rows in set (0.00 sec)
mysql> select `Name` from
`Shop`.`Kunden`;
!
+-----------------+!
| Name
|!
+-----------------+!
| Max Müller
|!
| Franziska Maier |!
+-----------------+!
2 rows in set (0.00 sec)
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 14
Datensätze filtern und sortieren
• Über den Befehl „where“ kann
die Ergebnismenge durch
Filter eingeschränkt werden
• Der Befehl „order by“ erlaubt
es, durch die Parameter „asc“
und „desc“ die
Ergebnismenge auf- oder
absteigend nach bestimmten
Spalten zu sortieren
• Weitere Filter/Sortierungen
werden kommagetrennt
hintereinander geschrieben
15.11.11
SQL Kommandozeile
mysql> select * from `Shop`.`Kunden`
where `Kundennummer`=2;
+--------------+-----------------+------------+!
| Kundennummer | Name
| Hausnummer |
+--------------+-----------------+------------+!
|
2 | Franziska Maier |
5 |!
+--------------+-----------------+------------+!
1 row in set (0.00 sec)
mysql> select * from `Shop`.`Kunden`
order by `Name` asc;
+--------------+-----------------+------------+!
| Kundennummer | Name
| Hausnummer |
+--------------+-----------------+------------+!
|
2 | Franziska Maier |
5 |!
|
1 | Max Müller
|
2 |!
+--------------+-----------------+------------+!
2 rows in set (0.00 sec)
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 15
Datensätze ändern und löschen
• Die Befehle „update...set“
und „delete from“
ermöglichen das ändern und
löschen von Datensätzen
• Um nicht alle Datensätze
einer Tabelle zu ändern oder
zu löschen, können die
Befehle mit dem Befehl
„where“ kombiniert werden
• Die beiden Befehle werden
lediglich auf die
Ergebnismenge angewendet
15.11.11
SQL Kommandozeile
mysql> update `Shop`.`Kunden` set
`Name`='Franziska Müller' where
`Kundennummer`=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1
Warnings: 0
mysql> delete from`Shop`.`Kunden`
where `Kundennummer`=1;
Query OK, 1 row affected (0.00 sec)
mysql> select * from `Shop`.`Kunden`;
+--------------+------------------+------------+!
| Kundennummer | Name
| Hausnummer |
+--------------+------------------+------------+!
|
2 | Franziska Müller |
5 |!
+--------------+------------------+------------+!
1 row in set (0.00 sec)
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 16
Verknüpfte Datenanfragen
• Über sog. Joins können
Inhalte verschiedener
Tabellen in einer Anfrage
abgefragt werden
• Über Referenzen der
verschiedenen Tabellen
untereinander können
Datensätze mit anderen
in Bezug gesetzt werden
Beispiel:
Abfrage aller Kunden aus der Tabelle Kunden und dazu
jeweils die passende Adresse aus der Tabelle Adressen,
referenziert über die Kundennummer
Tabelle Kunden
Kundennummer
Name
1
Max Müller
2
AdressID
Franziska Maier
1
2
Kundennummer
Straße
...
2
Bahnhofsstraße
1
Hauptstraße
Tabelle Adressen
SQL Kommandozeile
mysql> select * from `Shop`.`Kunden` join `Shop`.`Adressen` on
`Kunden`.`Kundennummer`= `Adressen`.`Kundennummer`;
+--------------+-----------------+-----------+--------------+-----------------+!
| Kundennummer | Name
| AddressId | Kundennummer | Straße
|!
+--------------+-----------------+-----------+--------------+-----------------+!
|
1 | Max Müller
|
2 |
1 | Hauptstraße
|!
|
2 | Franziska Maier |
1 |
2 | Bahnhofsstraße |!
+--------------+-----------------+-----------+--------------+-----------------+!
2 rows in set (0.00 sec)
15.11.11
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 17
MySQL & PHP
• Zur einfachen Verknüpfung einer MySQL-Datenbank mit PHP
stellt PHP die MySQL Extension bereit
• Die MySQL Extension bietet ein umfangreiches Set von
Funktionen um mit Datensätzen in MySQL Datenbanken zu
arbeiten
• Mit der Extension können MySQL Datensätze zu PHP Arrays
umgewandelt werden, was den Zugriff auf Ergebnisse
erheblich erleichtert
• Alle angeboten Funktionen sind auf der PHP Website
dokumentiert: http://www.php.net/manual/de/ref.mysql.php
15.11.11
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 18
MySQL & PHP Beispiel
PHPAndMySQL.php
15.11.11
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 19
Literatur
Bücher:
• Hugh E. Williams, David Lane
Web Database Applications with PHP & MySQL
ISBN-10: 0596000413
• Paul DuBois
MySQL Cookbook
ISBN-10: 059652708X, ISBN-13: 978-0596527082
Web:
• http://www.mysql.de/
• http://dev.mysql.com/
Artikel:
• Peter Pin-shan Chen: The Entity-Relationship Model: Toward a Unified
View of Data, ACM Transactions on Database Systems, Vol. 1, p. 9-36,
1976
15.11.11
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Slide 20
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Chair in Information and Service Systems
Saarland University, Germany
Univ.-Prof. Dr.-Ing. Wolfgang Maass