Folien

Werbung
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
Herunterladen