PythonQ 240-8XX Bedienungsanleitung Seite 528

  • Herunterladen
  • Zu meinen Handbüchern hinzufügen
  • Drucken
  • Seite
    / 768
  • Inhaltsverzeichnis
  • LESEZEICHEN
  • Bewertet. / 5. Basierend auf Kundenbewertungen
Seitenansicht 527
Kapitel 8: MySQL-Tab ellentypen 507
Bei InnoDB findet jede Benutzeraktivit¨at innerhalb von Transaktionen statt. Wenn der
Auto-Commit-Modus in MySQL benutzt wird, stellt jedes SQL-Statement eine einzelne
Transaktion dar. Wenn der Auto-Commit-Modus ausgeschaltet wird, kann man sich
vorstellen, dass ein Benutzer stets eine Transaktion offen hat. Wenn er das SQL-COMMIT-
oder ROLLBACK-Statement absetzt, beendet das die aktuelle Transaktion und eine neue
beginnt. Beide Statements heben alle InnoDB-Sperren auf, die ahrend der aktuellen
Transaktion gesetzt wurden. Ein COMMIT bedeutet, dass die in der aktuellen Transaktion
gemachten
¨
Anderungen permanent und sichtbar f¨ur andere Benutzer gemacht werden.
Auf der anderen Seite bricht ein ROLLBACK alle
¨
Anderungen ab, die in der aktuellen
Transaktion gemacht wurden.
8.5.8.1 Konsistentes Lesen
Konsistentes Lesen bedeutet, dass InnoDB seine Multiversionsf¨ahigkeiten nutzt, um einer
Anfrage einen Schnappschuss der Datenbank zu einem bestimmten Zeitpunkt zu zeigen. Die
Anfrage sieht genau die
¨
Anderungen, die von Transaktionen durchgef¨uhrt wurden, die bis
zu diesem Zeitpunkt a/jointfilesconvert/293675/bgeschlossen wurden (committed), und keine
¨
Anderungen, die sp¨ater
gemacht wurden oder die noch nicht a/jointfilesconvert/293675/bgeschlossen sind. Die Ausnahme von der Regel
ist, dass die Anfrage die
¨
Anderungen sieht, die durch die Transaktion selbst durchgef¨uhrt
wurde, die die Anfrage absetzt.
Wenn eine Transaktion ihr erstes Konsistentes Lesen durchf¨uhrt, weist InnoDB den
Schnappschuss oder Zeitpunkt zu, den jedes Konsistente Lesen in derselben Transaktion
benutzen wird. Im Schnappschuss sind alle Transaktionen enthalten, die vor der Zuweisung
zum Schnappschuss a/jointfilesconvert/293675/bgeschlossen (committed) wurden. Daher ist Konsistentes Lesens
innerhalb derselben Transaktion auch untereinander konsistent. Sie onnen einen
frischeren Schnappschuss f ¨ur Ihre Anfragen erhalten, indem Sie die aktuelle Transaktion
beenden (commit) und danach neue Anfragen absetzen.
Konsistentes Lesen ist der vorgabem¨aßige Modus, in dem InnoDB SELECT-Statements abar-
beitet. Konsistentes Lesen setzt keinerlei Sperren auf die Tabellen, auf die es zugreift. Daher
onnen andere Benutzer zur selben Zeit, wie Konsistentes Lesen auf die Tabelle durchgef¨uhrt
wird, diese ver¨andern.
8.5.8.2 Lesevorg¨ange sperren
Unter manchen Umst¨anden ist Konsistentes Lesen nicht w¨unschenswert. Angenommen, Sie
wollen eine neue Zeile in die Tabelle kind einf¨ugen und dabei sicherstellen, dass das Kind
bereits Eltern in der Tabelle eltern hat.
Wenn Sie Konsistentes Lesen benutzen, um die Tabelle eltern zu lesen und in der Tat die
Eltern des Kindes in der Tabelle sehen, onnen Sie dann sicher die Kind-Zeile zur Tabelle
kind hinzuf¨ugen? Nein, denn es kann sein, dass zwischenzeitlich jemand anderes die Eltern-
Zeile aus der Tabelle eltern gel¨oscht hat und Sie das nicht sehen.
Die osung besteht darin, das SELECT im Sperrmodus durchzuf¨uhren. LOCK IN SHARE MODE.
SELECT * FROM eltern WHERE NAME = ’Hinz’ LOCK IN SHARE MODE;
Wenn Sie ein Lesen im Share-Modus durchf¨uhren, heißt das, dass die letzten verf¨ugbaren
Daten gelesen werden und eine Shared-Modus-Sperre auf die Zeile gesetzt wird, die gele-
sen wird. Wenn die letzten Daten zu einer noch nicht a/jointfilesconvert/293675/bgeschlossenen Transaktion eines
Seitenansicht 527
1 2 ... 523 524 525 526 527 528 529 530 531 532 533 ... 767 768

Kommentare zu diesen Handbüchern

Keine Kommentare