Sie sind auf Seite 1von 24

Mat.Nr.:!

Name:

Klausur Datenbanken 1
Andreas Heß, Hochschule Furtwangen, 12. Juli 2012

Punkteverteilung und Benotungsschema


Einstieg: Wissensfragen 10 Punkte
Thema 1: Datenbankentwurf und DDL 22 Punkte
Thema 2: Normalformen 15 Punkte
Thema 3: Abfragen und DML 43 Punkte
Thema 4: Transaktionen 10 Punkte
Summe 100 Punkte
Zum Bestehen sind 50 Punkte notwendig.

Hinweise
Geben Sie auf jeder Seite der Klausur Ihren Namen und Ihre Matrikelnummer an.
Bitte verwenden Sie keine zusätzlichen Blätter und nehmen Sie die Seiten dieser Klausur nicht
auseinander. Der Platz auf den Aufgabenblättern sollte im allgemeinen für die Antworten
ausreichen. Zusätzlich befindet sich nach jedem Themenblock eine Leerseite mit Raum für Notizen.
Verwenden Sie bei Bedarf auch die Rückseiten.

Hilfsmittel
Auf der letzten Seite finden Sie die Ihnen bereits aus der Vorlesung bekannte SQL-Übersicht.
Weitere Hilfsmittel sind nicht zugelassen.

1/24
Mat.Nr.:! Name:

Einstieg: Wissensfragen (10 Punkte)

Datenbank-Architektur
Aufgabe 1 (3 Punkte)
Sie haben in der Vorlesung die ANSI-SPARC-Architektur kennengelernt. Bitte beschriften Sie
dieses Diagramm.

Sicht 1 Sicht 2 ... Sicht n

logische Ebene

physische Ebene
logische Ebene

Aufgabe 2 (3 Punkte)
a.) Was bedeutet „logische Datenunabhängigkeit“?

b.) Welches Mittel, das Sie in der Vorlesung kennengelernt haben, kann dazu benutzt werden,
logische Datenunabhängigkeit zu erreichen?

Aufgabe 3 (4 Punkte)
a.) Wofür stehen die Abkürzungen DDL und DML?

b.) Kreuzen Sie für die folgenden SQL-Anweisungen jeweils an, ob sie zur DDL oder zur DML
gehören. Betrachten Sie die Query Language als Teil der DML. Es wird jeweils ein halber Punkt
pro korrekt angekreuzter Aussage vergeben und ein halber Punkt pro falsch angekreuzter Aussage
abgezogen. Nicht angekreuzte Aussagen zählen nicht.
CREATE TABLE! ❍ DDL ❍ DML
ALTER TABLE! ❍ DDL ❍ DML
UPDATE! ❍ DDL ❍ DML
SELECT! ❍ DDL ❍ DML

2/24
Mat.Nr.:! Name:

Thema 1: Datenbankentwurf und DDL (22 Punkte)

FNr Name Vorname

Fahrer

faehrt

Datum
n

Fahrt

n n

faehrt
von

PLZ faehrt
nach

1 1
Ortsname

Ort

Gegeben ist ein E/R-Modell einer Datenbank eines einfachen Fahrtenbuchs. Eine Fahrt wird immer
von genau einem in der Datenbank bekannten Fahrer durchgeführt. In der Datenbank sind nur
deutsche Orte enthalten, d.h. jeder Ort hat eine fünfstellige PLZ. Eine Fahrt hat immer einen Start-
und einen Zielort und die Fahrten finden nur innerhalb Deutschlands zwischen in der Datenbank
bekannten Orten statt.

Aufgabe 1 (3 Punkte)
Setzen Sie das E/R-Modell von der 1:N-Schreibweise in die (min, max)-Notation um. Achten Sie
auf den Unterschied zwischen (0,1) und (1,1).
Bringen Sie die Änderungen direkt am hier gezeigten Diagramm an.

3/24
Mat.Nr.:! Name:

Aufgabe 2 (12 Punkte)


Setzen Sie das E/R-Modell in SQL DDL um. Fügen Sie wo angebracht künstliche Schlüssel ein.
Achten Sie auf eine sinnvolle Wahl der Datentypen und NOT NULL.

FNr Name Vorname

Fahrer

faehrt

Datum
n

Fahrt

n n

faehrt
von

PLZ faehrt
nach

1 1
Ortsname

Ort

4/24
Mat.Nr.:! Name:

Aufgabe 2 – Weiterer Raum zur Beantwortung


Die Aufgabenstellung finden Sie auf der vorherigen Seite.

FNr Name Vorname

Fahrer

faehrt

Datum
n

Fahrt

n n

faehrt
von

PLZ faehrt
nach

1 1
Ortsname

Ort

5/24
Mat.Nr.:! Name:

Aufgabe 3 (5 Punkte)
An der Datenbank sollen Änderungen vorgenommen werden.
a.) Fügen Sie bei der Fahrt eine zusätzliche Spalte „Fahrtstrecke“ hinzu. Die Spalte soll die
gefahrene Strecke in ganzen Kilometern aufnehmen.

b.) Was müssen Sie beachten, wenn die Tabelle schon Daten enthält und die neue Spalte NOT
NULL sein soll?

c.) Eine Fahrt darf aus Sicherheitsgründen nicht länger als 400 Kilometer sein. Fügen Sie ein
Constraint hinzu, das prüft, dass die Fahrtstrecke mindestens 1 und höchstens 400 Kilometer ist.

Aufgabe 4 (2 Punkte)
Im laufenden Betrieb werden häufig Fahrer mit ihrem Namen und Vornamen gesucht sowie
Fahrerlisten, die nach Namen und Vornamen sortiert sind, abgefragt. Es stellt sich heraus, dass diese
Abfragen sehr langsam sind, wenn viele Fahrer in der Datenbank gespeichert sind. Welche
Maßnahme eignet sich, um diese Abfragen zu beschleunigen?
Geben Sie das entsprechende SQL-Statement an!

6/24
Mat.Nr.:! Name:

Raum für Notizen

7/24
Mat.Nr.:! Name:

Thema 2: Normalformen (15 Punkte)


Aufgabe 1 (5 Punkte)
Betrachten Sie eine Tabelle, die sich in der 3. Normalform befindet. Welche Aussagen treffen zu?
Es wird jeweils ein halber Punkt pro korrekt angekreuzter Aussage vergeben und ein halber Punkt
pro falsch angekreuzter Aussage abgezogen. Nicht angekreuzte Aussagen zählen nicht.

trifft
trifft zu nicht Aussage
zu

Die Tabelle muss auch in der 1. Normalform sein.

Die Tabelle muss auch in der 2. Normalform sein.

Die Tabelle darf nur atomare Attribute haben, die keine Mengen beinhalten.

Der Primärschlüssel darf nicht aus mehreren Spalten bestehen.

Jedes Nichtschlüsselattribut hängt vom vollständigen Primärschlüssel ab.

Jedes Nichtschlüsselattribut darf nur vom Primärschlüssel, nicht aber von


anderen Nichtschlüsselattributen abhängen.

Die Tabelle darf keine Fremdschlüsselspalte haben.

Wenn eine Tabelle in der 1. Normalform ist und keinen zusammengesetzten


Primärschlüssel hat, ist sie automatisch auch in der 2. Normalform.

Wenn eine Tabelle in der 2. Normalform ist und keinen zusammengesetzten


Primärschlüssel hat, ist sie automatisch auch in der 3. Normalform.

In keiner Zeile der Tabelle darf der Wert des Primärschlüssels NULL sein.

8/24
Mat.Nr.:! Name:

Aufgabe 2 (10 Punkte)


Bringen Sie die folgende nicht normalisierte Tabelle für eine Musikammlung in die 3. Normalform.
Für jedes Album ist der Name des Interpreten (bzw. der Band) und der Ländercode des
Herkunftslandes, der Titel des Albums, das Erscheinungsjahr des Albums sowie eine Liste der
Stücke mit ihrer Länge gespeichert.
Verwenden Sie für die Lösung die Schreibweise des relationalen Modells. Sie brauchen für diese
Aufgabe keinen Wert auf Datentypen zu legen, aber kennzeichnen Sie Primär- und Fremdschlüssel!
Sie dürfen bei Bedarf zusätzliche Surrogatschlüssel einführen.

Musik

Interpret Land Album Jahr Tracks

Heather Nova BM Oyster 1994 1. Walk This World 3:49


2. Heal 3:56
3. Island 6:23
4. Throwing Fire At The Sun 5:58

Heather Nova BM Siren 1998 1. London Rain 3:51


2. Blood Of Me 3:59
3. Heart And Shoulder 3:59

Heather Nova BM 300 Days At Sea 2011 1. Beautiful Ride 4:27


2. Higher Ground 4:17
3. Stop The Fire 3:53

One Republic US Dreaming Out Loud 2007 1. Say (All I Need) 3:51
2. Mercy 4:01
3. Stop And Stare 3:44
4. Apologize 3:29

One Republic US Waking Up 2009 1. Made For You 4:18


2. All The Right Moves 3:58
3. Secrets 3:45

Brownie Mary US Naked 1998 1. Like I Really Do 3:48


2. Naked 4:05
3. Something We Both Know 4:16
4. Butterfly 4:03

Snow Patrol UK Final Straw 2003 1. How To Be Dead 3:22


2. Wow 4:02
3. Gleaming Auction 2:04

Snow Patrol UK Fallen Empires 2011 1. I‘ll Never Let You Go 4:43
2. Called Out In The Dark 4:02
3. The Weight Of Love 4:16

9/24
Mat.Nr.:! Name:

Raum für Notizen

10/24
Mat.Nr.:! Name:

Thema 3: Abfragen und DML (43 Punkte)


Der Schachclub SC 1926 Hassloch richtet jährlich an Pfingsten ein großes Turnier aus und
verwendet zur Verwaltung eine Datenbank.
Es werden alle teilnehmenden Spieler erfasst. Spieler haben eine Nummer als Primärschlüssel
sowie einen Namen, einen Vornamen und ein Geburtsdatum. Bei Meistern ist ihr Titel angegeben,
so steht z.B. die Abkürzung „GM“ für „Großmeister“ oder „IM“ für „internationaler Meister“.
Außerdem wird die Deutsche Wertungszahl (DWZ) erfasst, die die Spielstärke angibt. Der Bereich
reicht ungefähr von unter 1000 bei Anfängern bis zu weit über 2500 bei Meistern. Zuletzt ist noch
die Vereinszugehörigkeit über einen Fremdschlüssel angegeben. Die Vereine selbst sind in einer
weiteren Tabelle mit einer Nummer und ihrem Namen erfasst.
Für jede gespielte Partie, identifiziert durch eine Nummer, wird ein Eintrag in der Tabelle „Partien“
erstellt. Es sind jeweils über Fremdschlüssel die Spieler mit den weißen und mit den schwarzen
Figuren referenziert. In der Spalte „Ergebnis“ wird eine 1 eingetragen, wenn Weiß gewinnt, 0 wenn
Schwarz gewinnt oder 0,5, wenn das Spiel unentschieden ausgegangen ist.
Zur leichteren Weiterverarbeitung der Daten gibt es außerdem eine Sicht „Ergebnisse“, die die aus
der Partien-Tabelle entnommenen Daten aufbereitet, so dass in der Spalte „PNr“ die Nummer der
Partie, in der Spalte „SpielerNr“ die Nummer eines Spielers und in der Spalte „Punkte“ die
Punktzahl für diesen Spieler in dieser Partie erscheint; also 1, falls der Spieler gewonnen hat, 0 falls
er verloren hat oder 0,5 falls das Spiel unentschieden ausgegangen ist. Für jede gespielte Partie
tauchen somit in der Sicht „Ergebnisse“ zwei Zeilen auf und es ist hier nicht erkennbar, ob ein
Spieler in der Partie mit den weißen oder schwarzen Figuren gespielt hat.
Das relationale Schema ist auf der folgenden Seite detailliert und mit Beispieldaten angegeben. Auf
den Seiten mit den Aufgabenstellungen wird das relationale Schema jeweils oben auf der Seite in
Kurzform wiederholt.
Vereine : {[ VNr : integer,
Name : varchar(100) ]}
Spieler : {[ SpielerNr : integer,
Name : varchar(100),
Vorname : varchar(100),
Geburtsjahr : decimal(4,0),
Titel : char(3),
DWZ : integer,
VNr : integer (➚ Vereine)]}
Partien : {[ PNr : integer,
Weiss : integer (➚ Spieler),
Schwarz : integer (➚ Spieler),
Ergebnis : decimal(2,1) ]}
Ergebnisse : {[ PNr : integer,
SpielerNr : integer,
Punkte : decimal(2,1) ]}

11/24
Mat.Nr.:! Name:

Spieler

SpielerNr Name Vorname Geburtsjahr Titel DWZ VNr

1 Anand Vishwanathan 1969 GM 2791 5

2 Aronjan Lewon 1982 GM 2825 6

3 Carow Johannes 1996 2195 1

4 Heß Andreas 1977 1598 1

5 Huober Hubert 1972 1987 2

6 Müller Hans 1958 1789 3

7 Meyer Horst 1938 1803 4

8 Schulz Stefan 1968 2005 4

9 Stümper Harald 1980 983 4

Vereine Ergebnisse (Sicht)

VNr Name PNr SpielerNr Ergebnis

1 Sfr. Heidesheim 1 3 1

2 Sfr. Mainz 1 4 0

3 Sfr. Furtwangen - Vöhrenbach 2 4 0,5

4 SC 1926 Hassloch 2 5 0,5

5 OSG Baden Baden 3 5 0

6 Turm Emsdetten 3 1 1

7 SV Simonswald 4 9 0

4 4 1
Partien
5 2 1
PNr Weiss Schwarz Ergebnis
5 9 0
1 3 4 1
6 6 0
2 4 5 0,5
6 2 1
3 5 1 0
7 1 0,5
4 9 4 0
7 2 0,5
5 2 9 1
8 9 0
6 6 2 0
8 8 1
7 1 2 0,5

8 9 8 0

12/24
Mat.Nr.:! Name:

Vereine : {[ VNr : integer, Partien : {[ PNr : integer,


Name : varchar(100) ]} Weiss : integer (➚ Spieler),
Schwarz : integer (➚ Spieler),
Spieler : {[ SpielerNr : integer,
Ergebnis : decimal(2,1) ]}
Name : varchar(100),
Vorname : varchar(100), Ergebnisse : {[ PNr : integer,
Geburtsjahr : decimal(4,0), SpielerNr : integer,
Titel : char(3), Punkte : decimal(2,1) ]}
DWZ : integer,
VNr : integer (➚ Vereine)]}

Aufgabe 1 (2 Punkte)
Schreiben Sie eine Abfrage, die alle Spalten der Tabelle Vereine nach Namen alphabetisch sortiert
anzeigt.

Aufgabe 2 (3 Punkte)
Schreiben Sie eine Abfrage, die alle Spalten der Tabelle Spieler alphabetisch nach Nach- und
Vornamen sortiert anzeigt, es sollen aber nur die Großmeister ausgegeben werden.

Aufgabe 3 (3 Punkte)
Schreiben Sie eine Abfrage, die in den Spalten „Name“, „Vorname“, „Verein“ und „DWZ“ alle
Spieler mit ihrem Namen, Vornamen, dem Namen ihres Vereins und ihrer DWZ anzeigt. Die Liste
soll nach DWZ absteigend sortiert sein, also die besten Spieler zuerst.

13/24
Mat.Nr.:! Name:

Vereine : {[ VNr : integer, Partien : {[ PNr : integer,


Name : varchar(100) ]} Weiss : integer (➚ Spieler),
Schwarz : integer (➚ Spieler),
Spieler : {[ SpielerNr : integer,
Ergebnis : decimal(2,1) ]}
Name : varchar(100),
Vorname : varchar(100), Ergebnisse : {[ PNr : integer,
Geburtsjahr : decimal(4,0), SpielerNr : integer,
Titel : char(3), Punkte : decimal(2,1) ]}
DWZ : integer,
VNr : integer (➚ Vereine)]}

Aufgabe 4: OUTER JOIN (3 Punkte)


Prüfen Sie, ob es Vereine gibt, die zwar in der Datenbank auftauchen, von denen aber keine Spieler
im Turnier teilnehmen. Schreiben Sie dazu eine Anfrage, die in den Spalten „VNr“ und „Name“ alle
Vereine auflistet, für die kein entsprechender Spieler in der Tabelle Spieler existiert. Lösen Sie die
Aufgabe mit einem OUTER JOIN.

Aufgabe 5: Unterabfragen (3 Punkte)


Erstellen Sie eine Abfrage, die das selbe Ergebnis wie die Abfrage in Aufgabe 4 liefert, aber lösen
Sie die Aufgabe diesmal mit einer Unterabfrage

14/24
Mat.Nr.:! Name:

Vereine : {[ VNr : integer, Partien : {[ PNr : integer,


Name : varchar(100) ]} Weiss : integer (➚ Spieler),
Schwarz : integer (➚ Spieler),
Spieler : {[ SpielerNr : integer,
Ergebnis : decimal(2,1) ]}
Name : varchar(100),
Vorname : varchar(100), Ergebnisse : {[ PNr : integer,
Geburtsjahr : decimal(4,0), SpielerNr : integer,
Titel : char(3), Punkte : decimal(2,1) ]}
DWZ : integer,
VNr : integer (➚ Vereine)]}

Aufgabe 6: Aggregatfunktionen (5 Punkte)


Schreiben Sie eine Abfrage, die in den Spalten „VNr“, „Name“ und „DWZ_Schnitt“ alle am
Turnier teilnehmenden Vereine mit der durchschnittlichen DWZ ihrer Spieler anzeigt. Die Ausgabe
soll nach DWZ absteigend sortiert sein, also die besten Vereine zuerst. Es sollen nur Vereine mit
einer durchschnittlichen DWZ von > 1900 angezeigt werden.

Aufgabe 7 (3 Punkte)
Der Ausrichter des Turniers kassiert von allen Spielern jeweils 15 Euro Startgeld. Nur Großmeister
und jugendliche Spieler, die nach 1993 geboren sind, zahlen nichts. Schreiben Sie eine Abfrage, die
nur genau eine Zeile mit einer Spalte „Einnahmen“, in der die gesamten Einnahmen in Euro
ausgegeben werden, als Ergebnis hat.

15/24
Mat.Nr.:! Name:

Vereine : {[ VNr : integer, Partien : {[ PNr : integer,


Name : varchar(100) ]} Weiss : integer (➚ Spieler),
Schwarz : integer (➚ Spieler),
Spieler : {[ SpielerNr : integer,
Ergebnis : decimal(2,1) ]}
Name : varchar(100),
Vorname : varchar(100), Ergebnisse : {[ PNr : integer,
Geburtsjahr : decimal(4,0), SpielerNr : integer,
Titel : char(3), Punkte : decimal(2,1) ]}
DWZ : integer,
VNr : integer (➚ Vereine)]}

Aufgabe 8 (5 Punkte)
Schreiben Sie eine Abfrage, die die Spielergebnisse aus der Tabelle Partien etwas schöner anzeigt.
Es soll in den Spalten „PNr“, „Weiss_Name“, „Weiss_Punkte“, „Schwarz_Name“ und
„Schwarz_Punkte“ die Partienummer, der Nachname des Spielers mit den weißen Figuren, die
Punktzahl des Spielers mit den weißen Figuren (dies ist die Spalte Ergebnis aus der ursprünglichen
Tabelle), der Nachname des Spielers mit den schwarzen Figuren und die Punktzahl des Spielers mit
den schwarzen Figuren angezeigt werden. Beispiel:

Partien

PNr Weiss_Name Weiss_Punkte Schwarz_Name Schwarz_Punkte

1 Carow 1 Heß 0

2 Heß 0,5 Huober 0,5

3 Huober 0 Anand 1

… … … … …

Hinweis: Die Tabelle Spieler muss in der Abfrage zwei Mal vorkommen!

16/24
Mat.Nr.:! Name:

Vereine : {[ VNr : integer, Partien : {[ PNr : integer,


Name : varchar(100) ]} Weiss : integer (➚ Spieler),
Schwarz : integer (➚ Spieler),
Spieler : {[ SpielerNr : integer,
Ergebnis : decimal(2,1) ]}
Name : varchar(100),
Vorname : varchar(100), Ergebnisse : {[ PNr : integer,
Geburtsjahr : decimal(4,0), SpielerNr : integer,
Titel : char(3), Punkte : decimal(2,1) ]}
DWZ : integer,
VNr : integer (➚ Vereine)]}

Aufgabe 9 (5 Punkte)
Schreiben Sie das Statement auf, mit dem die Sicht „Ergebnisse“ erstellt wurde. Lösen Sie die
Aufgabe mit Hilfe von UNION.

Aufgabe 10 (4 Punkte)
Erstellen Sie die Rangliste. Schreiben Sie eine Abfrage, die in den Spalten „SpielerNr“, „Name“,
„Vorname“ und „Gesamtpunkte“ alle Spieler, die Partien gespielt haben, mit ihrer bisher insgesamt
erreichten Punktzahl auflistet. Verwenden Sie die Sicht „Ergebnisse“. Die Ausgabe soll nach
Punktzahl absteigend sortiert sein.

17/24
Mat.Nr.:! Name:

Vereine : {[ VNr : integer, Partien : {[ PNr : integer,


Name : varchar(100) ]} Weiss : integer (➚ Spieler),
Schwarz : integer (➚ Spieler),
Spieler : {[ SpielerNr : integer,
Ergebnis : decimal(2,1) ]}
Name : varchar(100),
Vorname : varchar(100), Ergebnisse : {[ PNr : integer,
Geburtsjahr : decimal(4,0), SpielerNr : integer,
Titel : char(3), Punkte : decimal(2,1) ]}
DWZ : integer,
VNr : integer (➚ Vereine)]}

Aufgabe 11: Einfügen (2 Punkte)


Der Verein Turm Emsdetten (Sie können die Vereinsnummer 6 als bekannt voraussetzen.) hat einen
Spieler nachgemeldet. Es handelt sich um den Großmeister (GM) Boris Gelfand, geboren 1968,
DWZ 2727. Fügen Sie die entsprechende Zeile in die Tabelle „Spieler“ ein. Geben Sie keinen Wert
für die Spalte „SpielerNr“ an, denn dieser Wert soll automatisch erzeugt werden.

Aufgabe 12: Löschen (5 Punkte)


a.) Sie haben festgestellt, dass der SV Simonswald zwar in der Datenbank auftaucht, aber kein
einziger Spieler dieses Vereins am Turnier teilnimmt. Löschen Sie den Verein mit der VNr 7 aus der
Tabelle „Vereine“.

b.) In der Datenbank seien bei allen Fremdschlüsselbeziehungen ON DELETE CASCADE-


Klauseln angegeben worden. Was wäre geschehen, wenn Sie statt des SV Simonswald einen
anderen Verein, der tatsächlich Spieler bei dem Turnier angemeldet hat, gelöscht hätten?

c.) Welche Tabellen der Datenbank könnten in diesem Fall von einer Löschung betroffen sein?
Wäre die Sicht „Ergebnisse“ auch betroffen?

d.) Können Sie direkt einzelne Zeilen aus der Sicht „Ergebnisse“ löschen?

18/24
Mat.Nr.:! Name:

Raum für Notizen

19/24
Mat.Nr.:! Name:

Thema 4: Transaktionen (10 Punkte)


Aufgabe 1 (4 Punkte)
Sie verwenden die Datenbank aus Thema 3. Es laufen zwei Transaktionen, A und B. Es werden
folgende SQL-Anweisungen in der angegebenen Reihenfolge und mit den angegebenen Ausgaben
durchgeführt.

Transaktion A Transakation B

①! START TRANSACTION

②! SELECT SpielerNr, Name, DWZ


! FROM Spieler
! WHERE DWZ > 2800;
Ausgabe:

Spieler

SpielerNr Name DWZ

③! START TRANSACTION 2 Aronjan 2825

④! UPDATE Spieler
! SET DWZ = 2817
! WHERE SpielerNr = 2;
⑤ COMMIT; ⑥ SELECT SpielerNr, Name, DWZ
! FROM Spieler
! WHERE DWZ > 2800;
Ausgabe = ?
⑦ COMMIT;

Der eingestellte Isolationslevel von Transaktion B ist READ COMMITTED.


a.) Welche Ausgabe erzeugt das Select-Statement in Transaktion B mit der Nummer ⑥ ?

b.) In der Transaktion B ist eine Transaktionsanomalie aufgetreten. Wie heißt diese
Transaktionsanomalie?

c.) Welchen Isolationslevel müssen Sie mindestens einstellen, um diese Transaktionsanomalie


sicher auszuschließen?

20/24
Mat.Nr.:! Name:

Raum für Notizen

21/24
Mat.Nr.:! Name:

Aufgabe 2 (4 Punkte)
Sie verwenden die Datenbank aus Thema 3. Es laufen zwei Transaktionen, A und B. Es ist
vorgesehen, dass folgende SQL-Anweisungen in der angegebenen Reihenfolge und mit den
angegebenen Ausgaben durchgeführt werden sollen.

Transaktion A Transakation B

①! START TRANSACTION

②! SELECT SpielerNr, Name, DWZ


! FROM Spieler
! WHERE SpielerNr = 1;
Ausgabe:

Spieler

SpielerNr Name DWZ

1 Anand 2791

③! START TRANSACTION

④! UPDATE Spieler ⑤! UPDATE Spieler


! SET DWZ = 2803 ! SET DWZ = 2768
! WHERE SpielerNr = 1; ! WHERE SpielerNr = 1;
⑤ COMMIT; ⑥ COMMIT;

Der eingestellte Isolationslevel beider Transaktionen ist diesmal SERIALIZABLE.


a.) Lassen sich die beiden Transaktionen überhaupt so wie gezeigt durchführen? Begründen Sie Ihre
Antwort!

b.) Welches Problem könnte auftreten, wenn die oben gezeigten Anweisungen ausgeführt werden,
aber nicht SERIALIZABLE, sondern ein niedrigerer Isolationslevel eingestellt ist?

22/24
Mat.Nr.:! Name:

Aufgabe 3 (2 Punkte)
Erklären Sie in ein bis zwei Sätzen, was „atomar“ im Zusammenhang mit Transaktionen bedeutet.

23/24
Mat.Nr.:! Name:

SQL-Kurzübersicht
Andreas Heß, Hochschule Furtwangen

Tabellen anlegen
CREATE TABLE tabelle (
spalte Datentyp [NOT NULL] [UNIQUE] [PRIMARY KEY]
[REFERENCES tabelle2] [CHECK (Bedingung)]
[DEFAULT wert]
[AUTO_INCREMENT]
[GENERATED ALWAYS|BY DEFAULT AS IDENTITY],
[PRIMARY KEY(spalte1, spalte2)]
[FOREIGN KEY(spalte1, spalte2) REFERENCES tabelle2]
[CONSTRAINT c_name [CHECK (Bedingung)|UNIQUE(spalte)] );

Tabellen ändern, löschen


ALTER TABLE tabelle
[ADD COLUMN neue_spalte Datentyp …] [DROP COLUMN alte_spalte]
[ADD CONSTRAINT c_name …] [ALTER COLUMN spalte NOT NULL]
[ADD PRIMARY KEY …] [ADD FOREIGN KEY …]

Sichten anlegen
CREATE VIEW sicht1 AS SELECT …

Index anlegen
CREATE INDEX index1 ON tabelle(spalte1, spalte2);

Selektion/Projektion, Verbund, Vereinigung, Subselects


SELECT [tabelle.]spalte1 [AS andererName], spalte3 FROM tabelle1
[LEFT|RIGHT|FULL [OUTER]]|[INNER] JOIN tabelle2 [AS andererName]
ON(Bedingung)|USING(spalte)]
[WHERE Bedingung|spalte LIKE 'X%'|spalte IS [NOT] NULL]
[GROUP BY spalte1, spalte2]
[HAVING Bedingung] [ORDER BY spalte [DESC]];
SELECT spalte FROM tabelle1 UNION SELECT spalte FROM tabelle2;
SELECT spalte FROM tabelle1 WHERE spalte|wert [NOT] IN (SELECT …)

Daten einfügen, löschen, aktualisieren


INSERT INTO tabelle(spalte1, spalte2) VALUES (wert1, wert2);
INSERT INTO tabelle SELECT …
DELETE FROM tabelle WHERE Bedingung;
UPDATE tabelle SET spalte = wert WHERE Bedingung;

Aggregatfunktionen (Gruppenfunktionen), sonstige Funktionen


AVG, MIN, MAX, SUM, COUNT
CURRENT_TIME, CURRENT_DATE, CURRENT_TIMESTAMP

24/24

Das könnte Ihnen auch gefallen