relationale datenbank mysql html php asp activex perl xml javascript mysql

77
Relationale Datenbank MySQL Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Upload: adler-kaut

Post on 05-Apr-2015

122 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Relationale Datenbank MySQLRelationale Datenbank MySQL

HTML

PHP

ASP

ActiveX

PERL

XML

JavaScript

MYSQL

Page 2: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Gliederung

0. Einblick Datenbanken

1. Einführung MySQL

2. 2. Relationale Datenbank

Page 3: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Einblick Datenbanken

Momentan gängige Datenbanken:

- Oracle (32% Marktanteil)

- DB2 (33% Marktanteil)

- MySQL (21 % Marktanteil)

- SQL-Server (11% Marktanteil, von Microsoft)

Page 4: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Dateiorgansation Datenbanken

EinkaufProduktion

ReWe Vertrieb

ArtikelLieferantenBestellungenBestand

ArtikelAufträgeStücklistenArbeitspläne

KundenForderungenVerbindlichkeitenLieferanten

ArtikelKundenAngeboteAufträge

Hoher Bedarfan Kommunikation und

Datenaustausch

Page 5: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Was ist MySQL ?

MySQL ist ein echter Multi-User, Multi-Treaded SQL Datenbank und wird von allen großen Providern oder auch Suchmaschinenbetreibern eingesetzt. MySQL ist eine CLient/Server Implentierung, bestehend aus einem Server-Dämon mysqld und vielen Client Programmen, sowie Bibliotheken für PERL, PHP/3, PHP/4, ASP.

Die bedeutsamsten Vorteile von MySQL sind: Geschwindigkeit, Stabilität einfache Bedienbarkeit.

MySQL wurde ursprünglich entwickelt, weil auf TCX (dem Server der Entwickler) ein SQL Server benötigt wurde, der sehr große Datenbanken handeln konnte, und zwar um eine Größenordnung schneller, als die Datenbankhersteller damals liefern konnten. MySQL ist nun seit 1996 auf vielen Seiten im Einsatz.

Page 6: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Begriffe

• Eine Datenbank ist eine strukturierte Sammlung von Daten - Datenbasis

• Aufbau, Verwaltung und Strukturierung werden von einem Datenbank-Management- System (DBMS) übernommen.

• Die Abfrage erfolgt über spezielle Abfragesprachen, wie z.B. SQL (Structured Query

Language) oder ODBC (Open DataBase Connectivity)

Page 7: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

ODBC

• Open DataBase Connectivity, (ODBC), Ein Standard für den Zugriff auf verschiedene Datenbanksysteme.

• ODBC hat Schnittstellen für Java, Visual Basic, C++, SQL

• ODBC Treiberpaket beinhaltet Treiber für Access, Paradox, dBase, Excel and Btrieve

• ODBC übersetzt Abfragen jeweils in die datenbankspezifische Sprache.

Page 8: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

ODBC

Vorteile:• Datenbankunabhängige Entwicklung möglich• Zugriff auf entfernte Datenbanken

Nachteile:• Langsam gegenüber nativen Zugriffen• Microsoft Fixiertheit• Notwendigkeit, eigene Treiber für die

Datenbanken zu installieren und Datenbanken u.U. selbst eintragen zu müssen

Page 9: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datenbanktypen

• hierarchisch Daten werden in einer Baumstruktur gespeichert

• objektorientiert besitzt sämtliche Merkmale objektorientierter Programmierung, wie Klassen, Objekte, Vererbung usw

Page 10: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datenbanktypen

• relational Daten werden in Tabellen gespeichert. Die Tabellen sind durch Beziehungen (relations) miteinander verknüpft. Dadurch ist es möglich, Daten aus mehreren Tabellen zu kombinieren bei Abfragen.

Merkmale• Eine Relation zwischen zwei Tabellen entsteht dadurch,

dass eine Tabelle ein Feld mit Primärschlüsselwerten einer anderen Tabelle enthält.

• Relationen machen eine DB der Tabellenkalkulation(Tabelle) überlegen

Page 11: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

MySQL - Merkmale

• MySQL ist ein Datenbank Management System für relationale Datenbanken.

• Es ist in kompilierter Form und auch als Source-Code frei verfügbar.

• Es läuft auf Windows und UNIX Servern• Installation und Administration ist relativ einfach• Es hat Programmierschnittstellen zu den

wichtigsten Programmiersprachen: Java, C++, Perl, PHP …

Page 12: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

MySQL - Sicherheit

• MySQL besitzt ein zuverlässige Sicherheitskonzept. Es basiert auf:

– Benutzer– Passworte– Zugriffsrechte: Administrator kann

Zugriffsrechte auf Datenbanken, Tabellen und einzelne Felder innerhalb der Tabelle für jeden einzelnen Benutzer festlegen

Page 13: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

MySQL - Datentypen

MySQL kennt 27 Datentypen, u.a.:• INTEGERS (ganzzahlige Zahlen), • FLOAT, DOUBLE (Gleitkommazahlen)• DECIMAL (Festkommazahlen)• CHAR, VARCHAR (Zeichenketten)• TEXT, BLOB (Texte, Binärobjekte) • DATE, TIME, DATETIME (Datum) • TIMESTAMP, YEAR (Datum)• SET, and ENUM (Auswahl aus vorgegebenen

Werten)

Page 14: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Attribute für Tabellenspalten

Attribute • beeinflussen die Eigenschaften von Tabellenspalten

(=Datenfeldern) • Angabe von Attributen erfolgt bei der

Spaltendeklaration in der CREATE-Anweisung (Tabellenerstellung)

• Die Angabe ist optional

Attribute für DatentypenSyntax der Spaltendeklaration:Spaltenname, Spaltentyp

[NOT NULL|NULL] [DEFAULT Standardwert] ...

Page 15: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Attribute für Datentypen

Attribut Bedeutung Feldtyp

[DEFAULT Standardwert] Wert eintragen, wenn sonst keine Angaben

Alle

[NULL] Spalte darf NULL-Werte enthalten

Alle

[NOT NULL] Spalte darf keine NULL-Werte enthalten

Alle

[AUTO_INCREMENT]: automatisch generierte Zahlenfolge

INTEGER

Page 16: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Attribute für Datentypen

Attribut Bedeutung Feldtyp

[(M)] Anzeigenbreite INTEGER

[(M,D)] Anzeigenbreite, Zahl der Nachkommastellen

Dezimalzahlen(FLOAT, DOUBLE)

[UNSIGNED] Ohne Vorzeichen - Nur positive Werte möglich

INTEGER, FLOAT, DOUBLE

[ZEROFILL] Füllt bis zur Anzeigenbreite mit Nullen auf

INTEGER, FLOAT, DOUBLE

Page 17: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Attribute für Datentypen

Attribut Bedeutung Feldtyp

[PRIMARY KEY] Primärschlüssel, eindeutig Alle

[KEY] Schlüssel Alle

[INDEX] Tabellenindex – beschleunigt Suchabfragen

Alle

[UNIQUE] Eindeutiger Indexwert, darf nur einmal vorkommen

INTEGERCHAR

Page 18: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Tabellenindizes

• Indizes können für eine oder mehrere Tabellenspalten angelegt werden.

• Indizes sind sinnvoll bei Spalten, die oft als Suchkriterium benutzt werden.

• Sie beschleunigen Suchabfragen.• Indizes benötigen Speicherplatz und

verlangsamen das Einfügen von neuen Datensätzen.

Page 19: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Beziehung zwischen SQL und MySQLBeziehung zwischen SQL und MySQL

• SQL ist eine Programmiersprache.

• MySQL ist ein RDBMS (relationales Datenbank-Management-System), das SQL benutzt, um Daten zu bearbeiten, zu erstellen und anzuzeigen.

Page 20: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Relationale DatenbankRelationale Datenbank

• Tabelle• Feld• Eintrag• Schlüssel• Beziehung• Normalisierung

Page 21: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Relationale Datenbank

Ein Primärschlüssel ist ein eindeutiges Feld innerhalb der Tabelle. Kein anderer Datensatz in diesem Feld hat den gleichen Wert. Dies dient dazu, einen Datensatz von allen anderen Datensätzen in dieser Tabelle zu unterscheiden.

Ein Fremdschlüssel repräsentiert den Wert des Primärschlüssel für eine verknüpfte Tabelle. Es dient als strukturelle Link, der die Beziehung zwischen verschiedenen Tabellen definiert.

Page 22: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Relationale Datenbank

Type der Beziehung

– Eins-zu-eins (1:1)– Eine-zu-vielen (1:n)– Viel-zu-vielen (m:n)

Page 23: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Relationale Datenbank

Eins-zu-eins Beziehung

Tabelle1...

DatensatzDatensatzDatensatz

...

Tabelle2...

DatensatzDatensatz

...

KundennummerKunde

Page 24: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Relationale Datenbank

Eine-zu-vielen Beziehung

Tabelle1...

DatensatzDatensatzDatensatz

...

Tabelle2...

DatensatzDatensatzDatensatzDatensatz

...

Bestellung

Kunde

Page 25: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Relationale Datenbank

Viele-zu-vielen Beziehung

Tabelle1...

DatensatzDatensatzDatensatzDatensatz

...

Tabelle2...

DatensatzDatensatzDatensatzDatensatz

...

Artikel Bestellung

Page 26: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Anlegen von Indexen und Tabellen

Die MySQL-Anweisung zum Erzeugen von Tabellen lautet:CREATE TABLE tabelle( spaltenname Datentyp [NOT NULL], ...)

Für jede Spalte sind Bezeichnung und Typ anzugeben, zusätzlich kann mit NOT NULL festgelegt werden, daß die Spalte keine unbestimmten NULL-Werte beinhalten darf, was z.B. bei Schlüsselspalten erforderlich ist

CREATE INDEX (Index für Tabelle anlegen)

Löschen von Indexen und TabellenLogische Objekte können vollständig (d.h. sowohl die Beschreibung als auch die beinhalteten Daten!) aus einer Datenbank gelöscht werden. Für Tabellen und Indexen lauten die SQLAnweisungen:

DROP TABLE DROP INDEX

Page 27: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

MySQLMySQL –Syntax

• CREATE

CREATE DATABASE Datenbankname

CREATE TABLE Tabellenname

• DROP

DROP DATABASE Datenbankname

DROP TABLE Tabellenname

• INSERT

INSERT INTO Tabellenname VALUES (Wert, Wert, Wert, ...)

• UPDATE

UPDATE Tabellenname SET Spaltenname = Wert WHERE x = y

Page 28: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Abfragen von Tabellen

• SELECT ist der wichtigste SQL Befehl. Jede Anfrage an eine Datenbank beginnt mit SELECT. Die Techniken zur Abfrage von Datenbanken werden auch zu deren Veränderung mit DELETE, INSERT und UPDATE verwendet.

• Der SELCT Befehl kann auf eine oder mehrere Tabellen angewendet werden. Das Ergebnis der Suche ist wieder eine Tabelle. Die Auswahl der Spalten für die Ergebnistabelle nennt man Projektion, die der Zeilen Selektion. Werden für eine Anfrage Daten aus mehreren Tabellen zusammengetragen, spricht man von einem Join.

Page 29: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

SQL-Queries dazu

• SELECT name FROM studentin WHERE matrnr IN (SELECT matrnr FROM hoeren WHERE vorlnr = 'Inf 001');

• SELECT raum FROM vorlesung;

• SELECT zeit FROM vorlesung WHERE titel LIKE ‘Math%';

Page 30: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

MySQL

• DELETE

DELETE FROM Tabellenname WHERE a = b• JOIN

CROSS JOIN

INNER JOIN (Beinhaltet nur die Datensätze, bei denen die Inhalte der verknüpften Felder beider Tabellen gleich sind.)

LEFT JOIN• Sortieren

ORDER BY Spaltennamen

Page 31: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

MySQL

• Aggregat-Funktionen:

Funktionen, die in Spalten zusammenfassende, mathematische Berechnung durchführen.

COUNT()

COUNT(DISTINCT)

MAX()

MIN()

AVG()

SUM()

STD()

Page 32: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Interaktion

• Clientseitige Möglichkeiten

– Sicherstellen der Anzeigefähigkeit von gelieferten Informationen (bspw. PlugIns)

– Sicherstellen von „richtigen“ Anfragen an den Server (Eingabeüberprüfungen)

– Transformation von gelieferten Informationen in der gewünschten Art und Weise (Formatierung von Siteinhalten, StyleSheets)

• Serverseitige Möglichkeiten

– Entgegennahme von HTML- Requests Lieferung von HTML-Seiten

– Transformation der Requests in der gewünschten Art und Weise z.B. Übersetzung der Anfrage in ein MySQL-Statement oder auch zurück, d.h. Umwandlung eines Abfrageergebnisses in ein HTML-Dokument

– Weiterleitung von Client-Requests an andere Server, insbes. Datenbankserver

Page 33: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Interaktion

• Mit einem solchen Modell besteht die Möglichkeit, in Kombination der serverseitigen und clientseitigen Programmierung Webapplikationen zu erstellen, die die gewohnte Interaktivität von Computerprogrammen bieten

• gestatten es, den Added Value für eine Site zu erzeugen

• Man wird hiermit in die Lage versetzt, dem User Webseiten präsentieren zu können, welche sich frei nach seinen Wünschen konfigurieren lassen!

• d.h. entsprechend seines Verhaltens kann auf die Eingaben des Nutzers reagiert werden.

Page 34: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Dynamische Webseiten

• HTML-Formulare

• URL-Extensions (Datenübertragung zum Web-Server)

• JavaScript (Darstellung & Transformation der Informationen)

• Java (Darstellung & Transformation der Informationen)

• CSS/DHTML (Darstellung der Informationen)

• PlugIns (Darstellung von Informationen, teilweise auch Transformationen)

Verarbeitung des HTML-Dokuments/Query-Resultats mittels Computer-Programm

• CGI-Scripts (i.d.R. PERL)

• ASP (Active Server Pages)

• JSP (Java Server Pages)

• PHP ...• MySQL-Queries werden dazu benutzt den Datenbestand abzufragen und zu analysieren

Page 35: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

• Konzept der Datenanbindung ist flexibel– Zugriff auf eine einfache Textdatei (TDC)– Zugriff über Datenbankabfragesprache SQL auf eine

Datenbank, die SQL-Befehle verarbeiten kann. • Anbindung einer HTML-Datei an Daten aus einer

Datenbank, die über die Datenbank-Schnittstellen OLE-DB oder ODBC verfügen – beispielsweise MS Access, Oracle oder SQL-Server

wie MySql• Speichern von Daten möglich• Ebenfalls ActiveX-Control notwendig

Page 36: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datenbankabfrage mit PHP<?php$db_connection = @mysql_connect("localhost","root“,“pw");mysql_select_db(„ PHP_DB ");$db_result = mysql_query( "SELECT * FROM Kunden“, $db_connection);mysql_close($db_connection);?>

MySQL

Login RechnungNameKundenNummer

Db_connection

SELECT * FROM

Db_result

PHPPHP_DB

Datenbankabfrage mit PHP

Page 37: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datenbankabfrage mit PHP

15,00 €Müller123

450,45€Münz122

RechnungNameKundenNummer

Resultat nach Select

<?php$db_result =mysql_query( "SELECT KundenNummer,Name,Rechnung FROM Kunden“, $db_connection);while( $row =mysql_fetch_array( $db_result )){echo $row[“KundenNummer"];echo $row[“Name“];echo $row[“Rechnung“]; }

?>

Page 38: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

PHP Bank mit Datenbank-Anbindung<?phpecho ‘<h2>Login</h2>‘;$KundenNummer = $_POST[‘KundenNummer '];$Login = $_POST[‘Login'];phpBank_login( $ KundenNummer, $ Login);...?>

EinlogenEinlogen

Kunden Nummer

Login

function phpBank_login($v_ KundenNummer, $v_ Login){$db_connection = @mysql_connect("localhost","root“,“pw");mysql_select_db("PHP_DB");$db_result = mysql_query("SELECT * FROM Kunden WHERE KundenNummer =“.$v_ KundenNummer.“ AND PIN = “.$v_ Login“,$db_connection);If( $row = mysql_fetch_array( $db_result ) ){echo ‘Hallo ‘.$row[‘Name‘].‘ Ihr Rechnung: ‘.$row[‘Rechnung‘];}else{ die(‘Login ist falsch‘); }}

login.php

LoginHallo user2Ihr Rechnung:15€

Login ist falsch

Page 39: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

SESSION• Ausgangsproblem:

– Über HTTP werden keine ständigen Verbindungen zu den Servern hergestellt, sondern die Kommunikation läuft immer nach dem Schema „Anfrage“ => „Antwort“ (request/response). Deshalb können sich Webseiten per se nicht „erinnern“ (= stateless protocol).

• Lösung durch Sessions:– Entweder server- oder clientseitig (=> cookies)

werden pro User-Agent (= Browser etc.) individuelle Parameter gespeichert, auf die dann alle PHP Skripte Zugriff haben. Diese Parameter müssen dann nicht mehr mit POST oder GET übermittelt werden. Lediglich eine Session ID muss von Seite zu Seite übermittelt werden.

Page 40: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Gutes Design

Darstellungz.B.

<<HTML>>

Controller<<PHP>>

Wiederverwendbare Komponenten

<<PHP-Library>>

Datenbank-Abstraktionsschicht

Datenbank(leicht auswechselbar)

Page 41: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datenbank Abstraktionsschicht

• In einer Datenbankabstraktionsschicht werden alle Zugriffe auf die DB durch eine zentrale Datei mediatisiert.

• Sinn einer Datenbankabstraktionsschicht ist es, das Umstellen auf andere Datenbanken oder –quellen zu erleichtern. Auch können die Datenbankabfragen unabhängig vom restlichen Programmiercode entwickelt und getestet werden.

Page 42: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Quellen:• MySQL - Einfьhrung, Anwendung, Referenz, 1. Auflage Autor: Michael Kofler

• http://www.torsten-horn.de/techdocs/postgresql.htm

• Marsch J., Fritze J.: SQL: Eine praxisorientierte Einführung

• http://www.physik.uni-stuttgart.de

• http://www.mysteries-megasite.com/linux/SQL-tutorial.html SQL Tutorial Links

• http://www.mysql.com/ MySQL Dokumentation, Download, Tools

• http://www2.little-idiot.de/mysql/ MySQL Datenbankhandbuch

• MySQL Datenbankhandbuch Guido Stepken ( [email protected])

Page 43: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datenbankadministration mit MySQL

• Datensicherheit

• Wartung von Tabellen

• Replikationsdatenbanken

• Datenmigration, Import und Export

• Beispiel (PHP und MySQL)

Konstantin Altenhof

Page 44: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

DateiebeneSpeicherung der Daten auf Dateiebene

mysql MS-SQL-Server

Page 45: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datensicherheit

• Prävention mit Metadaten• Zeitangabe

Es ist eine gute Angewohnheit, in jeder Tabelle ein Feld mit dem Datentyp TIMESTAMP einzurichten.

• TIMESTAMP wird von MySQL automatisch erzeugt• Die Feldbreite durch die Deklaration bestimmt

– TIMESTAMP[14]: YYYYMMDDHHMMSS– TIMESTAMP[12]: YYYYMMDDHHMM– TIMESTAMP[10]: YYYYMMDDHH– TIMESTAMP[8]: YYYYMMDD– TIMESTAMP[6]: YYMMDD

• Beispiel aus Praxis.

Page 46: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datensicherheit

• Benutzerdaten– Für Stammdaten häufig überlegenswert.

• Benutzer zu ermitteln unter MySQL– USER()

Beispiel:

INSERT INTO Mitglieder (Name, Vorname, Erfasst_von)VALUES (`Schmidt`, `Beate`, USER() );

oder

UPDATE Mitglieder SET NAME=`Bayer`, Erfasst_von= USER();

Bemerkung: Im Web – IP-Adresse (PHP Funktion REMOTE_ADDR)

Page 47: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datensicherheit• Prüfziffern

– Aufbau der Tabelle:CREATE TABLE kd_konten (

Kunde CHAR(8) – FremdschlüsselKto_nr CHAR(8) Blz CHAR(10)Metha_when TIMESTAMPPruefziffer BIGINT );

Beispiel:SET @Kunde =`wischmil`,

@Kto_nr =`22222222222`,@Blz =`4420442044`,@Pruef =MD5(CONCAT(@Kunde,@Kto_nr,@Blz);

INSERT INTO kd_konten VALUES (@Kunde, @Kto_nr, @Blz, NULL, CONV(@Pruef,16,10);

Identität abgleichen, ohne die eigentlichen Daten zu kennen.Daten aus anderen Datenbeständen übernehmen.

Page 48: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datensicherheit

• Vollständige Datensicherung– Mysqldump– Mysqlhotcopy

Wer, wann, wie?Wer, wann, wie?– AutomatisierenAutomatisieren– Einmal die Woche ist eine gute FaustregelEinmal die Woche ist eine gute Faustregel– Speichern Sie gesicherte Daten immer auf Speichern Sie gesicherte Daten immer auf

einem anderem Datenträger (Tipp: Keine einem anderem Datenträger (Tipp: Keine Disketten verwenden).Disketten verwenden).

Page 49: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datensicherheit• Sichern mit mysqldump

– Erzeugt eine Datei, die SQL-Befehle enthält um die Datenbank mit allen Tabellen und Indizes wieder zu erzeugen und mit Daten zu fühlen.

mysqldump Datenbankname >Backupdatei.sql

mysqldump Db_1 Db_2 Db_3 >Backupdatei.sql

Schalter:- - password=xxx (Sicherheitslücke: Benutzerpasswort)- - - all-databases(aber …..)- - - add-drop-table (DROP TABLE, CREATE TABLE)- - - add-locks (LOCK TABLE, INSERT, UNLOCK)- - - extended-insert (nicht empfehlenswert, Syntax MySQL-

spezifisch) - - - complete-insert (ANSI-konform, Gegenstück zu –extended-

insert)

Page 50: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datensicherheit

• Sicherung unter UNIX automatisieren– Cron-jobs.

Aufgabe: Jeden Sonntag um 3 Uhr morgens ein Backup der Datenbank Kundenservice automatisch erstellen.

Lösung:

1. Textdatei mit folgendem Inhalt anlegen:

0 3 * * 0 mysqldump Kundenservice \\ >/home/db_admin/Backups/ kundenservice.sql

Die Datei speichern unter meine_cron_jobs.txt.

2. In einem Terminalfenster eingeben:

cronjob meine_cron_jobs.txt

Page 51: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datensicherheit• Sichern einzelner Tabellen

BACKUP TABLE tabellenname TO `/home/mein_zuhaus/bak`;

Bei diesem Vorgang fordert MySQL einen Read Lock an, kopiert Dateien tabellenname.frm und tabellenname.myd (Indexfiles werden neue generiert).

RESTORE TABLE tabellenname FROM `home/mein_zuhaus/bak`;

WICHTIG: Vorher eventuell vorhandenen Dateientabellenname.MYDtabellenname.MZItabellenname.frm

Page 52: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datensicherheit

• Sichern mit mysqlhotcopyPerlskript, Kopieren von Datenbanken im laufenden Betrieb.

Der unterschied zu mysqldump ist, dass dieses Programm die Datenbankdateien kopiert und nicht etwa eine SQL-Datei generiert.

Vorteil – Backups wesentlich weniger Zeit benötigen.

Nachteil – kopierten Dateien sind plattformabhängig und versionsabhängig.

Page 53: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datensicherheit

• Inkrementelle Strategien

- Veränderungen an der Tabelle aufzeichnen.

- Vollständige Backups restaurieren und anschließend mit den inkrementellen Backups vervollständigen.

Page 54: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datensicherheit

• Logging-Dateien

Skript einlegen und als Cron-Job täglich ausführen:

mv hostname-bin.001 hostname-bak.001

mysqladmin flusch-logs

cp hostname-bak.001 /usr/local/backups/mysql/

Nachteil: alle Änderungen aller Datenbanken.

Bemerkung: mysqlbinlog wandelt Binärformat in einen Textformat um.

Page 55: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datensicherheit• Restaurieren von Datenbanken

Zurücklesen von SQL-Dateien

Die Dateien die mit mysqldump erstellt wurden, erhalten SQL-Statements, die ausgeführt werden müssen.

Erste Möglichkeit:

Starten Sie SQL-Monitor mit

mysql –u root

Mit der SQL-Anweisung SOURCE die Backupdatei einlesen:

SOURCE /usr/local/backups/aktuellesbackup.sql

Zweite Möglichkeit: SQL-Datei direkt auf dem Kommandozeile zu übergeben:

mysql – u root </ usr/local/backups/aktuellesbackup.sql

Page 56: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datensicherheit

• Restaurieren von Datenbanken

Logfiles einlesen

Dafür müssen diese aber zuerst in eine Textdatei mit SQL-Befehl konvertiert werden:

mysqlbinlog –short-form \\

/usr/local/backups/log_02122004-bin>recover.sql

Anschließend die Datei recover.sql mit einer der beschriebenen Methoden in System einlesen.

Page 57: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Wartung von Tabellen

• SQL-Befehle zur Wartung von Tabellen

• ANALIZE TABLE• CHECK TABLE• OPTIMIZE TABLE• REPAIR TABLE

Page 58: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Wartung von Tabellen

CREATE TABLE top_secret(

very_secret varchar(120));

INSERT INTO top_secret VALUES(

‚Dies ist eine geheime Botschaft, die unter keinen Umständen länger als unbedingt notwendig gespeichert werden soll`);

DELETE FROM top_secret WHERE very_secret LIKE ‚Dies%‘;

Page 59: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Wartung von Tabellen• ANALIZE TABLE

ANALIZE TABLE Tabellenname_1, Tabellenname_2,…;

Der Befehl analysiert und reorganisiert die Indizes der jeweiligen Tabellen und gibt Information über aktuellen Zustand der Tabelle aus.

• CHECK TABLE

CHECK TABLE Tabellenname_1, Tabellenname_n [QUICK | FAST | MEDIUM | EXTENDED];

Zustand der Tabelle überprüfen und eine Diagnose erstellen.

Page 60: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Wartung von Tabellen• OPTIMIZE TABLE

OPTIMIZE TABLE Tabellenname_1, Tabellenname_2,…;

Mit OPTIMIZE TABLE werden aus einer Tabelle gelöschte Daten auch physikalisch entfernt.

• REPAIR TABLE

REPAIR TABLE Tabellenname_1, Tabellenname_n [QUICK | EXTENDED];

Hiermit lassen sich korrupte Tabellen reparieren. Wenn Wiederherstellen nicht gelingt, versuchen Sie es mit myisamchk -o.

Page 61: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Wartung von Tabellen• myisamchk und isamchk

myisamchk Schalter:-r -recover – Stellt praktisch jede beschädigte Tabelle wieder her. Die einzige Fehler, die mit dieser Methode nicht beseitigt werden kann, sind mehrer gleiche Werte in einem eindeutigen Index, was allerdings ein sehr unwahrscheinlicher Fall ist.

-o -safe-recover – Ist wesentlich langsamer als –recover.

• myisampack

Damit könnten gepackte Tabellen erzeugt werden. Beim Packen der Tabellen wird jede Spalte für sich gepackt (es wird für jede Spalte getrennt einen Huffmann-Baum angelegt, mit dem anschließend die Daten codiert werden), was Dateigröße erheblich reduziert.

Einsatz in folgenden Fällen:– Wenn die Datensätze nie oder höchst selten geändert werden.– Wenn eine harte Kopie einer Tabelle als Backup erstellt wird.– Wenn die Daten für nur-lesende Aplikationen auf CD-ROM abgelegt und ausgeliefert

werden (Wörterbuch, Lernsoftware)

Page 62: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

ReplicationsdatenbankenUm ein möglichst ausfallsicheres System einzurichten, bietet sich die

Möglichkeit, eine oder mehrere Replikationsdatenbanken anzulegen. MySQL synchronisiert dann eine oder mehrere Slave-Datenbanken mit einem Master-Datenbank

Außerdem bietet ein Slave in einem Produktionssystem die Möglichkeit, Backups nicht vom Master, sondern von einem Slave zu machen. Der Slave kann zu diesem Zweck ganz heruntergefahren, das Datenverzeichnis komprimiert und auf Band oder CD-Rom kopiert werden.

In der von MySQL verwendeten Technologie kann auf den Master lesend und schreibend zugegriffen werden, während von den Slaves nur gelesen werden kann.

Ein typischer Einsatz einer Replikationsdatenbank ist die eines Internetstores. Da über das Internet hauptsächlich lesend zugegriffen wird, werden die Daten von einem Slave zur Verfügung gestellt. Der Master läuft dann auf einem Server, der gar nicht vom Internet aus erreichbar ist.

Page 63: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Replicationsdatenbanken

MASTER-SEVER

User mit File-Rechte einlegen

GRANT FILE ON *.* TO repl@“%“ IDENTIFIED BY `XXX`;

In my.ini bzw. my.cnf im Abschnitt [mysqld] einen Server-ID eintragen.

server-id=1

Diesen Eintrag muss später auch bei den Slaves gesetzt werden, wobei jeder der Server eine andere Nummer bekommt.

Slave-Server

Folgende einträge in der Konfigurationsdatei my.ini bzw. my.cnf vornehmen.• master-host.• master-user• master-passwd.• master-port.

Page 64: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Replicationsdatenbanken

Einen Slave zum Master machen

Slave-Server herunterfahren.

Folgende Parameter in dem Bereich [mysqld] in der Datei my.ini bzw. my.cnf auskommentieren und Server-ID auf die den alten Master setzen.

• master-host.• master-user• master-passwd.• master-port.

Page 65: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datenmigration, Import und Export

• Dateien als Textdatei aus Access exportieren und in MySQL importieren.

Mit mysqlimport werden die Datensätze aus einer Textdatei importiert.

Beispiel:

mysqlimport Personalverwaltung c:\temp\fuhrpark.txt

(Vorausgesetzt, dass die Tabelle Fuhrpark in der Datenbank Personalverwaltung bereits besteht).

Optionen:- - fields-terminated-by (Trennung zwischen Spalten)- - lines-terminated-by (gibt Zeichen an, mit denen eine Zeile

abgeschlossen wird)- - fields-escaped-by (Markierung für Sonderzeichen)Bespiel:

mysqlimport –local „-fields-terminated-by:“ „lines-terminated-by=\r\n“ exceptions c:\temp\Fuhrpark.txt

Page 66: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datenmigration, Import und ExportImport der Daten mit LOAD DATA INFILEAuch das Importieren von Daten direkt mit einem SQL-Befehl ist

möglich.Der SQL-Befehl würde dann folgendermaßen lauten:

LOAD DATA INFILE “c:\temp\fuhrpark.txt“ INTO TABLE Personalverwaltung.Fuhrpark;

oder für lokalen Datenbank

LOAD DATA LOCAL INFILE “c:\temp\fuhrpark.txt“ REPLACE INTO TABLE Fuhrpark;

Import der Daten unter MySQL-Front

Im MySQL-Editor MySQL-Front habe Sie eine menügeführte Import- und Exportfunktion für Daten, die im Text- oder CSV-Format vorliegen.

Page 67: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datenmigration, Import und Export

Daten als Textdatei aus MySQL exportieren

Mysql –u root –password=xxx –batch „execute=SELECT * FROM fuhrpark:“ Personalverwaltung > export.txt

Daten als html aus MySQL exportieren

Mysql –u root –password=xxx –html „execute=SELECT * FROM fuhrpark:“ Personalverwaltung > export.html

Daten als Textdatei aus MySQL exportieren (Vertikale Datendarstellung)

Mysql –u root –password=xxx –vertical „execute=SELECT * FROM fuhrpark:“ Personalverwaltung > export_vertikal.txt

Page 68: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Beispiel

Page 69: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Beispiel

Page 70: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datenmigration, Import und Export

if($interpret!="")

{

if($jahr=="")$jahr="NULL";

mysql_query("INSERT INTO cds (titel,interpret,jahr) VALUES('$titel','$interpret',$jahr);");

}

Page 71: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Beispiel

Page 72: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Beispiel

Page 73: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Datenmigration, Import und Export

if($action=="del")

{

mysql_query("DELETE FROM cds WHERE id=$id;");

}

Page 74: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Beispiel

Page 75: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Beispiel

Page 76: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Beispiel

Page 77: Relationale Datenbank MySQL HTML PHP ASP ActiveX PERL XML JavaScript MYSQL

Quellen:

1. Das große Buch MySQL, DATA BECKER, Markus Barth und Günther Karl

2. MySQL/PHP Datenbankanwendungen, MITP, Jay Greenspan, Brad Bulger

3. PHP 4 (Umfassend zur MySQL –Programmierung, HANSER, Jörg Krause

4. www.mysql.com

http://www.mysql.com/

MySQL Dokumentation, Download, Tools