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.
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.
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.
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 |
... | ... | ... |
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 |
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; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |