Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Transaktionen und Isolationsstufen » Praktische Einführung in Isolationsstufen » Praktische Einführung: Einführung in Dirty Reads

 

Lektion 1: Dirty Read erstellen

Der Accountant führt eine Berechnung aus, während der Sales Manager dabei ist, einen Preis heraufzusetzen. Die Berechnung des Accountants beruhte auf fehlerhaften Daten, die der Sales Manager eingegeben hatte und gerade korrigieren wollte.

Voraussetzungen

In dieser Lektion wird davon ausgegangen, dass Sie die Rollen und Privilegien haben, die im Abschnitt "Privilegien" am Anfang dieser praktischen Einführung aufgeführt sind: Praktische Einführung: Einführung in Dirty Reads.

 Aufgabe
  1. Führen Sie als Sales Manager die folgenden Anweisungen aus, um den Preis aller T-Shirts um 0,95 US-Dollar zu erhöhen:

    UPDATE GROUPO.Products
       SET UnitPrice = UnitPrice + 95
       WHERE Name = 'Tee Shirt';
    SELECT ID, Name, UnitPrice
       FROM GROUPO.Products;

    Die folgende Ergebnismenge wird zurückgegeben:

    ID Name UnitPrice
    300 Tee Shirt 104.00
    301 Tee Shirt 109.00
    302 Tee Shirt 109.00
    400 Baseball Cap 9.00
    ... ... ...

    Der Sales Manager stellt sofort fest, dass 0,95 statt 95 einzugeben waren, aber bevor er seinen Fehler korrigieren kann, greift der Accountant von einem anderen Büro aus auf die Datenbank zu.

  2. Der Accountant der Firma ist besorgt, dass zuviel Geld im Lager steckt. Führen Sie als Accountant die folgende Anweisung aus, um den Gesamt-Einzelhandelswert des Lagerbestandes zu berechnen:

    SELECT SUM( Quantity * UnitPrice )
     AS Inventory
       FROM GROUPO.Products;

    Das folgende Ergebnis wird zurückgegeben:

    Inventory
    21453.00

    Leider ist diese Berechnung falsch. Der "Sales Manager" hat irrtümlich den Preis für die T-Shirts um $ 95 erhöht und das Ergebnis spiegelt diesen fehlerhaften Preis wider. Dieser Fehler zeigt eine typische Art von Inkonsistenz auf, die als Dirty Read bekannt ist. Sie haben als Accountant auf Daten zugegriffen, die der Sales Manager eingegeben, aber noch nicht festgeschrieben hat.

  3. Korrigieren Sie als Sales Manager Ihren Fehler, indem Sie die ersten Änderungen zurücksetzen und die richtige UPDATE-Anweisung eingeben. Überprüfen Sie, ob die neuen Werte auch richtig sind.

    ROLLBACK;
    UPDATE GROUPO.Products
    SET UnitPrice = UnitPrice + 0.95
    WHERE NAME = 'Tee Shirt';

    Die folgende Ergebnismenge wird zurückgegeben:

    ID Name UnitPrice
    300 Tee Shirt 9.95
    301 Tee Shirt 14.95
    302 Tee Shirt 14.95
    400 Baseball Cap 9.00
    ... ... ...
  4. Der Accountant weiß nicht, dass der von ihm berechnete Betrag nicht stimmt. Sie können den richtigen Wert sehen, wenn Sie die SELECT-Anweisung im Fenster des Accountants nochmals ausführen.

    SELECT SUM( Quantity * UnitPrice )
     AS Inventory
       FROM GROUPO.Products;
    Inventory
    6687.15
  5. Beenden Sie die Transaktion im Sales Manager-Fenster. Der Sales Manager würde eine COMMIT-Anweisung eingeben, um die Änderungen festzuschreiben, aber Sie sollten stattdessen eine ROLLBACK-Anweisung ausführen, um zu vermeiden, dass die lokale Kopie der SQL Anywhere-Beispieldatenbank geändert wird.

    ROLLBACK;

Ergebnisse

Der Accountant erhält unwissentlich fehlerhafte Informationen von der Datenbank, da der Datenbankserver sowohl die Arbeit des Sales Managers, als auch die des Accountants gleichzeitig bearbeitet.