40
MySQL

MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Embed Size (px)

Citation preview

Page 1: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

MySQL

Page 2: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

relationale Datenbanken

SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die alle

ueber Schluessel miteinander verknuepft sind. Bsp. Projektpartner, Versuchsteilnehmer, ganze

Schulklasssen, etc.Bei Versuch z.B. nur Id-Nr. der Schlusklasse eintragen. Daraus auf Schüler-Id und daraus auf e-mail Liste schliessen.

Page 3: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Normalisierung

Ein Datenbankkonzept, das alle Bedinungen fuer Konsistenz erfuellt, nennt man normalisiert.

In der Literatur sind Konzepte zur Normalisierung fuer Datenbankentwuerfe zu finden.

Page 4: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Benutzerrechte

Rechte auf verschiedenen Stufen: Servers, Datenbank, Tabelle, Kolonnen verschiedene Rechte z.B.: Datensatz suchen, einfuegen, loschen, ändern

SQL-Befehl grant.

Page 5: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Client

Ansteuerung der DB über Client, der SQL-Befehle übergibt

Bsp: update nanoworld.partners

set vorname = 'Dino' where login = 'dino'; select ident, vorname, nachname, login, email

from nanoworld.partners where mailinglist = 'y';

Page 6: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Beispiel

create table Personen( id int not null primary key auto_increment, vorname varchar(30), nachname varchar(30), mailinglist enum('y','n'),... PLZ smallint );

Page 7: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Zope - MySQL

Z MySQL Database Connection einfuegen Datenbase Conection String:

database[@host[:port]] [user [password [unix_socket]]]

In unserem Fall:personen@localhost homepage homepassw /tmp/mysql.sock

Page 8: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Z SQL Methoden

Die DB steuert man mit Z SQL Methoden an: SQL-Befehl darf dtml-tags enthalten Parameter können verlangt werden Rückgabe: Liste von Objekten, die als Attribute

die gefragten Feldnamen enthält. Zugriff: über

<dtml-in sql_Methoden_Name><dtml-var Feldname>

Page 9: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Interface für Partner

Datenbank: nanoworld.partners

Page 10: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die
Page 11: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Ablauf: Verzeichnis anmeldung:

Page 12: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

anmeldung.index_html

Page 13: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

anmeldung/formular

Page 14: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

anmeldung/report

Page 15: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

/anmeldung/index_html

<FORM NAME="email" METHOD="POST" onReset="history.back()" ACTION="formular">

Bitte geben sie Ihre e-mail Adresse an: <INPUT TYPE=TEXT NAME="email" SIZE=30

MAXLENGTH=30> <INPUT TYPE="submit" VALUE="Submit"> <INPUT TYPE="reset" VALUE="Abbrechen">

Page 16: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

anmeldung/formularUberprüfung

<dtml-if Cemail> <dtml-call "REQUEST.set('fehler','Sie sind bei

uns schon angemeldet.')"> </dtml-if>

Page 17: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

CemailZ SQL Methode

Page 18: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

anmeldung/formularFormular

<FORM NAME="formular" METHOD="POST" onReset="history.back()" action="report">

Anrede: <input type="text" name="anrede" value=""

size=20 maxlength=20> …. <INPUT TYPE="hidden" NAME="email"

VALUE="<dtml-var "_.string.lower(email)">" > ….

Page 19: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

anmeldung/report

Diverser Überprufungen Willkommen <dtml-var "REQUEST.get('anrede')"> <dtml-var"REQUEST.get('nachname')"><br>

<dtml-call Insert_Person_MySQL> <dtml-call benachrichtigen>

Page 20: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Insert_Person_MySQL

Insert into partners (vorname, nachname, login, passwort, email,

mailinglist,strasse,nr,ort,plz,land,position,sprache,anrede )

values ( <dtml-sqlvar vorname type="string" optional>, <dtml-sqlvar nachname type="string" optional>, … )

Page 21: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

benachrichtigen

<dtml-sendmail mailhost="an_guggi"> To: [email protected] From: nanopartners.anmeldung Subject: Partner hat sich angemeldet Angemeldet hat sich <dtml-in Abfrage> <dtml-var Field> <dtml-var expr="_.getitem(Field)"> </dtml-in> </dtml-sendmail>

Page 22: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

login/index_html

Page 23: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

/login/report

Page 24: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

auswahl

Page 25: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Bearbeiten

Page 26: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Abmelden

Page 27: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Abgmeldet

Page 28: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

anmeldung/index_html

Page 29: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

anmeldung/formular

Page 30: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

anmeldung/report

Page 31: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Ablauf

Page 32: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

login/index_html

<form action="report" method="post"> Login:<input type="text" name="login"><br> Passwort:<input type="password"

name="passwort"><br> <INPUT TYPE="submit" NAME="submit"

VALUE="Submit"> <INPUT TYPE="submit" NAME="submit"

VALUE="Passwort vergessen"> </form>

Page 33: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

login/report

<dtml-in Ueberpruefen size=1> <dtml-in "Personendaten(ident=ident)"> Login erfolgreich.<br> Willkommen <dtml-var anrede> <dtml-var nachname> <form action="../auswahl"

onReset="history.back()"> ...

Page 34: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

/bearbeiten/bearbeitenParameter: ident

<dtml-in Personendaten> <dtml-in Abfrage> <dtml-var "_.string.capitalize(Field)“> <dtml-if "Type[0]=='v'"> <INPUT TYPE=TEXT NAME="<dtml-var Field>"

VALUE="<dtml-var expr="_.getitem(Field,1)">" SIZE=<dtml-var "Type[8:_.string.find(Type,')')]"> MAXLENGTH=<dtml-var "Type[8:_.string.find(Type,')')]"> >

Page 35: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Personendaten

Parameter: ident

Select * from nanoworld.partners where ident=<dtml-sqlvar ident type="int">

Page 36: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Abfrage

show columns from nanoworld.partners

Page 37: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

bestaetige_bearbeiten

div. Überprüfungen Aenderungen gespeichert: <form action="../auswahl"> <input type="submit" value="OK"> <input type="hidden" value="<dtml-var

ident>" name="ident"> </form><br> <dtml-call Update_Person_MySQL>

Page 38: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

abmeldung/abmelden

Wollen Sie sich sicher abmelden? <form action="abgemeldet“ onReset="history.back()"> <input type="submit" value="OK"> <input type="reset" value="Abbrechen"> <INPUT TYPE="hidden" NAME="ident"

VALUE="<dtml-var ident>" > </form>

Page 39: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

abgemeldet

Auf Wiedersehen!<br> Sie wurden abgemeldet.

<form action="../anmeldung"> <input type="submit" value="OK"> </form><br>

<dtml-call Abmelden>

Page 40: MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die

Abmelden

Parameter: ident

delete from nanoworld.partners where ident=<dtml-sqlvar ident type="int">