PythonQ 240-8XX Manual de usuario Pagina 530

  • Descarga
  • Añadir a mis manuales
  • Imprimir
  • Pagina
    / 768
  • Tabla de contenidos
  • MARCADORES
  • Valorado. / 5. Basado en revisión del cliente
Vista de pagina 529
Kapitel 8: MySQL-Tab ellentypen 509
Sehen wir ein neues Kind in der Ergebnismenge, die die Anfrage zur¨uckgibt. Das verst¨oßt
gegen das Isolationsprinzip von Transaktionen: Eine Transaktion sollte in der Lage sein, so
abzulaufen, dass die Daten, die sie gelesen hat, sich nicht ahrend der Transaktion ¨andern.
Wenn wir einen Satz von Zeilen als Daten-Posten betrachten, w¨urde das neue ’Phantom’-
Kind dieses Isolationsprinzip durchbrechen.
Wenn InnoDB einen Index scannt, kann es auch die L¨ucke nach dem letzten Datensatz im
Index sperren. Genau das passiert im vorherigen Beispiel: Die Sperren, die von InnoDB
gesetzt werden, verhindert jedes Einf¨ugen in die Tabelle an Stellen, wo ID gr¨oßer als 100
ist.
Sie onnen achsten-Schl¨ussel-Sperren dazu benutzen, eine Eindeutigkeitspr¨ufung in Ihre
Applikation zu implementieren: Wenn Sie Ihre Daten im Share-Modus lesen und kein Du-
plikat f¨ur eine Zeile sehen, die Sie einf¨ugen werden, onnen Sie Ihre Zeile sicher einf¨ugen
und wissen, dass das achsten-Schl¨ussel-Sperren verhindern wird, dass zwischenzeitlich je-
mand eine Duplikatzeile Ihrer Zeile einf¨ugt. Daher gestattet Ihnen das achsten-Schl¨ussel-
Sperren, die Nicht-Existenz von irgend etwas in Ihrer Tabelle zu ’sperren’.
8.5.8.4 Sperren, die in InnoDB durch unterschiedliche SQL-
Statements gesetzt werden
SELECT ... FROM ... : Das ist Konsistentes Lesen, es wird ein Schnappschuss einer
Datenbank gelesen und es werden keine Sperren gesetzt.
SELECT ... FROM ... LOCK IN SHARE MODE : setzt gemeinsam genutztes (shared)
achsten-Schl¨ussel-Sperren auf alle Index-Datens¨atze, die beim Lesen gefunden
werden.
SELECT ... FROM ... FOR UPDATE : setzt exklusives achsten-Schl¨ussel-Sp erren auf
alle Index-Datens¨atze, die beim Lesen gefunden werden.
INSERT INTO ... VALUES (...) : setzt eine exklusive Sperre auf die eingef¨ugte Zeile.
Beachten Sie, dass diese Sperre kein achsten-Schl¨ussel-Sperren ist und andere Be-
nutzer nicht davon abh¨alt, etwas in die L¨ucke vor der eingef¨ugten Zeile einzuf¨ugen.
Wenn ein Fehler wegen doppelter Schl¨usseleintr¨age auftritt, setzt dieser Befehl eine
gemeinsam genutzte (shared) Sperre auf den doppelten (Duplikat) Index-Datensatz.
INSERT INTO T SELECT ... FROM S WHERE ... setzt eine exklusive Sperre (kein
achsten-Schl¨ussel-Sperren) auf jede Zeile, die in T eingef¨ugt wurde. Sucht nach S in
Form von Konsistentem Lesen, aber setzt achsten-Schl¨ussel-Sperren auf S, wenn
bei MySQL das Loggen angeschaltet ist. InnoDB muss in letzterem Fall Sperren
setzen, weil bei einer Roll-Forward-Wiederherstellung aus einer Datensicherung jedes
SQL-Statement auf genau dieselbe Weise ausgef¨uhrt werden muss, wie es urspr¨unglich
ausgef¨uhrt wurde.
CREATE TABLE ... SELECT ... f¨uhrt SELECT als Konsistentes Lesen oder mit gemein-
sam genutzten (shared) Sperren aus, wie im vorherigen Punkt.
REPLACE wird wie Einf¨ugen ausgef¨uhrt, wenn es keine Kollision auf einem eindeutigen
Schl¨ussel gibt. Ansonsten wird ein exklusives achsten-Schl¨ussel-Sperren auf die Reihe
gesetzt, die aktualisiert werden muss.
UPDATE ... SET ... WHERE ... setzt ein exklusives achsten-Schl¨ussel-Sperren auf je-
den Datensatz, der beim Suchen gefunden wird.
Vista de pagina 529
1 2 ... 525 526 527 528 529 530 531 532 533 534 535 ... 767 768

Comentarios a estos manuales

Sin comentarios