MySQL einrichten
Download bibliothek.sql
Für root wurde das Passwort xxxxx vergeben.
MySQL starten
H:\mysql>mysql
-u root -pxxxxx
Welcome
to the MySQL monitor. Commands end with ; or \g.
Your MySQL
connection id is 76 to server version: 5.0.27-community
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
MySQL-root richtet die Datenbank bibliothek mit den Tabellen buch, leser, leiht ein.
Nach Export
durch
mysqldump -hlocalhost
-uroot -pxxxxx bibliothek > bibliothek.txt
ist
der Import mit
mysql -hlocalhost
-uroot -pxxxxx bibliothek < bibliothek.txt
möglich.
Datenbank erstellen
mysql>
create
database bibliothek;
Query
OK, 1 row affected (0.00 sec)
mysql>
use
bibliothek;
Database
changed
Tabellen erstellen
mysql>
create
table buch (
-> BuchNr integer primary key,
->
BuchAutor char(15),
-> BuchTitel char(50),
->
BuchPreis decimal(6,2));
Query
OK, 0 rows affected (0.02 sec)
mysql>
create
table leiht (
-> BuchNr integer,
-> LeserNr
integer,
-> Datum date);
Query
OK, 0 rows affected (0.03 sec)
mysql>
create
table leser (
-> LeserNr integer,
-> LeserName
char(15),
-> LeserAlter tinyint,
-> LeserGeschlecht
char(1),
->
LeserBetreuer integer);
Query
OK, 0 rows affected (0.00 sec)
Daten eingeben
mysql>
insert
into buch values (23,'Schiller','Kabale und Liebe',29.00);
Query
OK, 1 row affected (0.00 sec)
mysql> insert
into buch values (45,'Frisch','Andorra',34.00);
Query
OK, 1 row affected (0.00 sec)
mysql> insert
into buch values (56,'Goethe','Faust',24.00);
Query
OK, 1 row affected (0.00 sec)
mysql> insert
into buch values (57,'Schiller','Die Räuber',32.00);
Query
OK, 1 row affected (0.00 sec)
mysql>
insert
into leser values (23,'Kurt',18,'m',45);
Query
OK, 1 row affected (0.00 sec)
mysql> insert
into leser values (33,'Else',13,'w',33);
Query
OK, 1 row affected (0.00 sec)
mysql> insert
into leser values (45,'Paul',18,'m',45);
Query
OK, 1 row affected (0.00 sec)
mysql> insert
into leser values (65,'Lisa',14,'w',33);
Query
OK, 1 row affected (0.00 sec)
mysql> insert
into leser values (67,'Erna',13,'w',33);
Query
OK, 1 row affected (0.00 sec)
mysql>
insert
into leiht values (57,45,'2002-04-02');
Query
OK, 1 row affected (0.00 sec)
mysql> insert
into leiht values (45,33,'2002-04-05');
Query
OK, 1 row affected (0.00 sec)
mysql> insert
into leiht values (23,45,'2002-04-05');
Query
OK, 1 row affected (0.00 sec)
mysql> insert
into leiht values (57,45,'2002-05-12');
Query
OK, 1 row affected (0.00 sec)
MySQL-root richtet einen Benutzer gast ein, der bezogen auf die Datenbank bibliothek Leserechte bekommt.
Es wird vorausgesetzt, dass sich der Benutzer gast am Server localhost anmeldet (direkt oder über telnet/ssh).
Benutzer anlegen
mysql>
grant
usage on bibliothek.* to gast@localhost identified by 'xgast';
Query
OK, 0 rows affected (0.09 sec)
mysql>
grant
select on bibliothek.* to gast@localhost;
Query
OK, 0 rows affected (0.03 sec)
Eine differenzierte Aufgabenverteilung für verschiedene Benutzer wird unten angegeben.
Datenbank schliessen
mysql>
quit;
Bye
H:\>
Jetzt kann gast , wenn er am Server localhost direkt oder über telnet/ssh angemeldet ist, die Datenbank öffnen und Abfragen starten.
Datenbank öffnen
H:\mysql>mysql
-u gast -pgast bibliothek
Welcome
to the MySQL monitor. Commands end with ; or \g.
Your MySQL
connection id is 76 to server version: 5.0.27-community
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Abfragen
einfachste Form:
mysql>
select
* from
leser;
+---------+-----------+------------+-----------------+---------------+
|
LeserNr | LeserName | LeserAlter | LeserGeschlecht | LeserBetreuer
|
+---------+-----------+------------+-----------------+---------------+
| 23
| Kurt |
18 | m
| 45
|
| 33 | Else |
13 | w
| 33
|
| 45 | Paul |
18 | m
| 45
|
| 65 | Lisa |
14 | w
| 33
|
| 67
| Erna |
13 | w
| 33
|
+---------+-----------+------------+-----------------+---------------+
5
rows in set (0.00 sec)
Abfrage mit Kriterium:
(1) Vergleichsoperatoren =, <, >, <=, >=, <> bzw. !=
mysql>
select
* from leser where
LeserAlter<18;
+---------+-----------+------------+-----------------+---------------+
|
LeserNr | LeserName | LeserAlter | LeserGeschlecht | LeserBetreuer
|
+---------+-----------+------------+-----------------+---------------+
| 33
| Else |
13 | w
| 33
|
| 65 | Lisa |
14 | w
| 33
|
| 67
| Erna |
13 | w
| 33
|
+---------+-----------+------------+-----------------+---------------+
3
rows in set (0.00 sec)
(2) Mengenoperatoren IN, =ANY, <ANY, ..., =ALL, ...
mysql>
select
* from leser where LeserAlter in
(14,16,18);
+---------+-----------+------------+-----------------+---------------+
|
LeserNr | LeserName | LeserAlter | LeserGeschlecht | LeserBetreuer
|
+---------+-----------+------------+-----------------+---------------+
| 23
| Kurt |
18 | m
| 45
|
| 45 | Paul |
18 | m
| 45
|
| 65
| Lisa |
14 | w
| 33
|
+---------+-----------+------------+-----------------+---------------+
3
rows in set (0.00 sec)
(3) Bereichsabgleich
mysql>
select
* from leser where LeserAlter between 14 and
18;
+---------+-----------+------------+-----------------+---------------+
|
LeserNr | LeserName | LeserAlter | LeserGeschlecht | LeserBetreuer
|
+---------+-----------+------------+-----------------+---------------+
| 23
| Kurt |
18 | m
| 45
|
| 45 | Paul |
18 | m
| 45
|
| 65
| Lisa |
14 | w
| 33
|
+---------+-----------+------------+-----------------+---------------+
3
rows in set (0.00 sec)
(4) Existenzabgleich
mysql>
select
* from leser where exists
-> (select * from leiht where
leiht.LeserNr=Leser.LeserNr);
+---------+-----------+------------+-----------------+---------------+
|
LeserNr | LeserName | LeserAlter | LeserGeschlecht | LeserBetreuer
|
+---------+-----------+------------+-----------------+---------------+
| 33
| Else |
13 | w
| 33
|
| 45 | Paul |
18 | m
| 45
|
+---------+-----------+------------+-----------------+---------------+
2
rows in set (0.00 sec)
(x) Die Bedingungen sind mit den Booleschen Operatoren NOT, AND, OR erweiterbar.
mysql>
select
* from leser
-> where LeserAlter not in (13,14)
->
and (LeserGeschlecht='m' or
LeserName='Erna');
+---------+-----------+------------+-----------------+---------------+
|
LeserNr | LeserName | LeserAlter | LeserGeschlecht | LeserBetreuer
|
+---------+-----------+------------+-----------------+---------------+
|
23 | Kurt |
18 | m |
45 |
| 45
| Paul | 18 | m
|
45
|
+---------+-----------+------------+-----------------+---------------+
2
rows in set (0.02 sec)
Projektion
mysql>
select LeserAlter,
LeserGeschlecht from leser;
+------------+-----------------+
|
LeserAlter | LeserGeschlecht |
+------------+-----------------+
|
18 | m
|
| 13 | w
|
|
18 | m
|
| 14 | w
|
|
13 | w
|
+------------+-----------------+
5 rows in
set (0.00 sec)
mysql>
select
distinct LeserAlter, LeserGeschlecht from
leser;
+------------+-----------------+
|
LeserAlter | LeserGeschlecht |
+------------+-----------------+
|
18 | m
|
|
13 | w
|
| 14 | w
|
+------------+-----------------+
3 rows in set (0.00 sec)
Join
mysql>
select
leser.LeserName, leiht.BuchNr
-> from leser,leiht
->
where leser.LeserNr=leiht.LeserNr;
+-----------+--------+
|
LeserName | BuchNr |
+-----------+--------+
| Paul
| 57 |
| Else |
45 |
| Paul |
23 |
| Paul | 57
|
+-----------+--------+
4 rows in set (0.00 sec)
mysql>
select
leser.LeserName, leiht.BuchNr
-> from leser inner join leiht
on leser.LeserNr=leiht.LeserNr;
+-----------+--------+
|
LeserName | BuchNr |
+-----------+--------+
| Paul
| 57 |
| Else |
45 |
| Paul |
23 |
| Paul | 57
|
+-----------+--------+
4
rows in set (0.00 sec)
mysql>
select
x.LeserName, y.LeserName
-> from leser x, leser y
->
where x.LeserBetreuer=y.LeserNr;
+-----------+-----------+
|
LeserName | LeserName |
+-----------+-----------+
| Else
| Else |
| Lisa
| Else |
| Erna | Else
|
| Kurt | Paul
|
| Paul | Paul
|
+-----------+-----------+
5 rows in set (0.00 sec)
mysql>
select
leser.LeserName, Leser_1.LeserName
-> from leser, leser as
leser_1
-> where
leser.LeserBetreuer=leser_1.LeserNr;
+-----------+-----------+
|
LeserName | LeserName |
+-----------+-----------+
| Else
| Else |
| Lisa
| Else |
| Erna | Else
|
| Kurt | Paul
|
|
Paul | Paul
|
+-----------+-----------+
5 rows in set (0.00 sec)
Spaltenüberschrift und Ergebnisspalte
mysql>
select BuchAutor as Autor
from buch;
+----------+
|
Autor |
+----------+
| Schiller |
|
Frisch |
|
Goethe |
| Schiller |
+----------+
4 rows
in set (0.00 sec)
mysql>
select
BuchPreis/1.07 as NettoPreis from buch;
+------------+
|
NettoPreis |
+------------+
|
27.1028 |
| 31.7757 |
|
22.4299 |
| 29.9065 |
+------------+
4
rows in set (0.00 sec)
Gruppenverarbeitung
mysql>
select
LeserNr, count(*) as Anzahl
-> from leiht
-> group by
LeserNr;
+---------+--------+
|
LeserNr | Anzahl |
+---------+--------+
|
33 | 1 |
| 45 |
3 |
+---------+--------+
2 rows in set (0.00 sec)
mysql>
select
LeserNr, count(distinct BuchNr) as Anzahl
-> from leiht
->
group by
LeserNr;
+---------+--------+
| LeserNr | Anzahl |
+---------+--------+
| 33 | 1 |
| 45 | 2 |
+---------+--------+
2
rows in set (0.00 sec)
mysql>
select
LeserNr, count(*) as Anzahl
-> from leiht
-> group by
LeserNr
-> having
min(Datum)<'2002-04-05';
+---------+--------+
| LeserNr | Anzahl |
+---------+--------+
| 45 | 3 |
+---------+--------+
1 row
in set (0.00 sec)
Gruppen-Funktionen:
AVG(Attribut), COUNT(*), COUNT(Attribut), MAX(Attribut), MIN(Attribut), SUM(Attribut)
mysql>
select
LeserNr, count(BuchNr) as Anzahl
-> from leiht
->
where Datum>='2002-04-05'
-> group by
LeserNr;
+---------+--------+
| LeserNr | Anzahl |
+---------+--------+
| 33 | 1 |
| 45 | 2 |
+---------+--------+
2
rows in set (0.00 sec)
Sortierte Ergebnisse
mysql>
select *
->
from leser
-> order by LeserAlter desc, LeserName
asc;
+---------+-----------+------------+-----------------+---------------+
| LeserNr | LeserName | LeserAlter | LeserGeschlecht | LeserBetreuer |
+---------+-----------+------------+-----------------+---------------+
| 23 | Kurt | 18 | m | 45 |
| 45 | Paul | 18 | m | 45 |
| 65 | Lisa | 14 | w | 33 |
| 33 | Else | 13 | w | 33 |
| 67 | Erna | 13 | w | 33 |
+---------+-----------+------------+-----------------+---------------+
5
rows in set (0.00 sec)
Subquery
Eine SELECT-Anweisung innerhalb einer andren SQL-Anweisung wird als Subquery bezeichnet. Bei einer geschachtelten SELECT-Anweisung wird mit der FROM-Klausel der äußeren SELECT-Anweisung eine Ausgangsrelation vorgegeben. Die Tupel dieser Relation werden mit der WHERE-Klausel überprüft. Dazu wird die innere SELECT-Anweisung ausgeführt und der Wahrheitswert ermittelt.
mysql>
select
LeserName
-> from leser, leiht
->
where leser.LeserNr=leiht.LeserNr and leiht.BuchNr in
->
(select BuchNr from buch where BuchAutor in
('Goethe','Schiller'));
+-----------+
| LeserName |
+-----------+
| Paul |
| Paul |
| Paul |
+-----------+
3
rows in set (0.00 sec)
Verwendete
Tabellen
mysql>
show
tables;
+----------------------+
|
Tables_in_bibliothek |
+----------------------+
| buch
|
|
leiht |
|
leser
|
+----------------------+
3 rows in set (0.00 sec)
mysql>
show
columns from
buch;
+-----------+--------------+------+-----+---------+-------+
|
Field | Type |
Null | Key | Default | Extra
|
+-----------+--------------+------+-----+---------+-------+
|
BuchNr | int(11) |
| PRI | 0 | |
|
BuchAutor | char(15) | YES | |
NULL | |
| BuchTitel
| char(50) | YES | |
NULL | |
| BuchPreis
| decimal(6,2) | YES | | NULL
|
|
+-----------+--------------+------+-----+---------+-------+
4
rows in set (0.00 sec)
mysql>
show
columns from
leiht;
+---------+---------+------+-----+---------+-------+
|
Field | Type | Null | Key | Default |
Extra |
+---------+---------+------+-----+---------+-------+
|
BuchNr | int(11) | YES | | NULL
| |
| LeserNr | int(11) |
YES | | NULL |
|
| Datum | date
| YES | | NULL |
|
+---------+---------+------+-----+---------+-------+
3
rows in set (0.00 sec)
mysql>
show
columns from
leser;
+-----------------+------------+------+-----+---------+-------+
|
Field | Type
| Null | Key | Default | Extra
|
+-----------------+------------+------+-----+---------+-------+
|
LeserNr | int(11)
| YES | | NULL |
|
| LeserName |
char(15) | YES | |
NULL | |
|
LeserAlter | tinyint(4) | YES | |
NULL | |
|
LeserGeschlecht | char(1) | YES | |
NULL | |
|
LeserBetreuer | int(11) | YES |
| NULL |
|
+-----------------+------------+------+-----+---------+-------+
5
rows in set (0.00 sec)
mysql>
select
* from buch;
+--------+-----------+------------------+-----------+
|
BuchNr | BuchAutor | BuchTitel | BuchPreis
|
+--------+-----------+------------------+-----------+
|
23 | Schiller | Kabale und Liebe |
29.00 |
| 45 | Frisch
| Andorra | 34.00
|
| 56 | Goethe | Faust
| 24.00
|
| 57 | Schiller | Die Räuber
| 32.00
|
+--------+-----------+------------------+-----------+
4
rows in set (0.00 sec)
mysql>
select
* from leiht;
+--------+---------+------------+
| BuchNr
| LeserNr | Datum
|
+--------+---------+------------+
| 57
| 45 | 2002-04-02 |
| 45
| 33 | 2002-04-05 |
| 23
| 45 | 2002-04-05 |
| 57
| 45 | 2002-05-12
|
+--------+---------+------------+
4 rows in set (0.02
sec)
mysql>
select
* from
leser;
+---------+-----------+------------+-----------------+---------------+
| LeserNr | LeserName | LeserAlter | LeserGeschlecht | LeserBetreuer |
+---------+-----------+------------+-----------------+---------------+
| 23 | Kurt | 18 | m | 45 |
| 33 | Else | 13 | w | 33 |
| 45 | Paul | 18 | m |
45 |
| 65
| Lisa | 14
| w |
33 |
|
67 | Erna |
13 | w
| 33
|
+---------+-----------+------------+-----------------+---------------+
5
rows in set (0.00 sec)
Differenzierte Benutzerverwaltung
MySQL-root richtet einen Benutzer bibliothek ein, der bezogen auf die Datenbank bibliothek alle Rechte bekommt.
Jedoch kann Benutzer bibliothek keine neuen Benutzer anlegen; deshalb führt root drei weitere Benutzer buch, leser, leiht ohne weitere Rechte ein.
Für Aufsicht über diese drei Benutzer übernimmt der Benutzer bibliothek, der Ihnen das Recht zum Lesen, Schreiben usw. bezogen auf einzelne Tabellen erteilt.
H:\mysql>mysql -u root
-pxxxxx
Welcome to the MySQL monitor. Commands end
with ; or \g.
Your MySQL connection id is 76 to server version:
5.0.27-community
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
grant
all privileges on bibliothek.* to bibliothek@localhost
->
identified by 'xbibliothek' with grant option;
Query
OK, 0 rows affected (0.00 sec)
mysql>
grant
all privileges on bibliothek.* to buch@localhost
->
identified by 'xbuch' with grant option;
Query
OK, 0 rows affected (0.00 sec)
mysql>
grant
all privileges on bibliothek.* to leiht@localhost
->
identified by 'xleiht' with grant option;
Query
OK, 0 rows affected (0.00 sec)
mysql>
grant
all privileges on bibliothek.* to leser@localhost
->
identified by 'xleser' with grant option;
Query
OK, 0 rows affected (0.00 sec)
mysql>
quit;
Bye
Benutzer bibliothek übernimmt die Kontrolle und teilt den Benutzern buch, leser und leiht Rechte zu.
Dem Benutzer leiht sollte später auch das Lesen (select) der Tabellenspalten buch.bnr, buch.autor, buch.titel, leser.lnr und leser.name ermöglicht werden.
H:\>mysql -u bibliothek
-pxbibliothek bibliothek
Welcome to the MySQL monitor.
Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.0.15
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
grant select,insert,update,delete
on bibliothek.buch
-> to buch@localhost;
Query
OK, 0 rows affected (0.00 sec)
mysql>
grant select,insert,update,delete
on bibliothek.leser
-> to leser@localhost;
Query
OK, 0 rows affected (0.00 sec)
mysql>
grant select,insert,update,delete
on bibliothek.leiht
-> to leiht@localhost;
Query
OK, 0 rows affected (0.00 sec)
mysql>
quit;
Bye
Jetzt kann Benutzer buch die Daten der Tabelle bibliothek.buch betreuen.
Die anderen Tabellen der Datenbank sieht er nicht!
Die Buchnummer bnr wird automatisch erhöht (Eingabe NULL), kann aber auch gezielt angegeben werden. Die bei der automatischern Erhöhung gewählte Zahl wird durch last_insert_id() abgefragt.
H:\>mysql
-u buch -pxbuch bibliothek
Welcome to the
MySQL monitor. Commands end with ; or \g.
Your MySQL
connection id is 5 to server version: 5.0.15
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
show
tables;
+----------------------+
|
Tables_in_bibliothek |
+----------------------+
|
buch
|
+----------------------+
1 row in set (0.00 sec)
mysql>
show
fields from
buch;
+--------+------------+------+-----+---------+----------------+
|
Field | Type | Null | Key |
Default | Extra
|
+--------+------------+------+-----+---------+----------------+
|
bnr | int(11) | NO |
PRI | NULL | auto_increment |
| bautor |
char(20) | YES | | NULL
|
|
| btitel | char(50) | YES |
| NULL |
|
| bpreis | float(5,2) | YES | |
NULL |
|
+--------+------------+------+-----+---------+----------------+
4
rows in set (0.05 sec)
mysql> insert
into buch values(5,'frisch','andorra',12);
Query
OK, 1 row affected (0.02 sec)
mysql> select
* from buch;
+-----+--------+---------+--------+
|
bnr | bautor | btitel | bpreis
|
+-----+--------+---------+--------+
| 5 |
frisch | andorra | 12.00
|
+-----+--------+---------+--------+
1 row in set (0.00
sec)
mysql> insert
into buch values(NULL,'geothe','faust',9);
Query
OK, 1 row affected (0.00 sec)
mysql> insert
into buch values(NULL,'dostojewski','der spieler',10.5);
Query
OK, 1 row affected (0.05 sec)
mysql> insert
into buch values(NULL,'schiller','die räuber',10.5);
Query
OK, 1 row affected (0.05 sec)
mysql> select
last_insert_id();
+------------------+
|
last_insert_id() |
+------------------+
|
8 |
+------------------+
1 row in set (0.00 sec)
mysql>
select * from
buch;
+-----+-------------+-------------+--------+
|
bnr | bautor | btitel
| bpreis |
+-----+-------------+-------------+--------+
|
5 | frisch | andorra
| 12.00 |
| 6 | geothe
| faust | 9.00 |
|
7 | dostojewski | der spieler | 10.50 |
| 8 |
schiller | die räuber | 12.20
|
+-----+-------------+-------------+--------+
5 rows in
set (0.00 sec)
mysql> delete
from buch where bnr=7;
Query
OK, 1 row affected (0.00 sec)
mysql> update
buch SET bautor='goethe' where bautor='geothe';
Query
OK, 1 row affected (0.01 sec)
mysql> replace into
buch values(6,'goethe','wahlverwandschaften',14.6);
Query OK, 1
row affected (0.01 sec)
mysql> select
* from buch;
+-----+-------------+---------------------+--------+
|
bnr | bautor | btitel
| bpreis |
+-----+-------------+---------------------+--------+
|
5 | frisch | andorra
| 12.00 |
| 6 | goethe
| wahlverwandschaften | 14.60 |
| 8 |
schiller | die räuber
| 12.20
|
+-----+-------------+---------------------+--------+
4
rows in set (0.00 sec)
mysql> quit;
Bye