2016-12-06 4 views
0

Ich suchte nach einem Beispiel der Datenkonsistenz über Tabellen mit ACID-Transaktion. Ich sah das Beispiel hier: http://microservices.io/patterns/data/shared-database.html summery ist wie folgt: KUNDE Tabelle hat eine Spalte CREDIT_LIMIT. Wir möchten in die ORDER-Tabelle einen neuen Datensatz einfügen, wenn OrderPrice < CREDIT_LIMIT dieses Benutzers lautet. Schriftliche Abfrage im Beispiel ist wie folgen, und ich glaube, es ist nicht ganz vollständig ist:Bedingte Einfügung in SQL

BEGIN TRANSACTION 
SELECT ORDER_TOTAL 
    FROM ORDERS WHERE CUSTOMER_ID = 123 
SELECT CREDIT_LIMIT 
    FROM CUSTOMERS WHERE CUSTOMER_ID = 123 
INSERT INTO ORDERS 
COMMIT TRANSACTION 

Nach dem Tutorial zu halten, die Datenkonsistenz über zwei Tabellen, soll es ein „If-Check“ in Abfrage sein. Jeder kann die Abfrage abschließen? Ich würde mich freuen.

Antwort

1

Ich würde dies anders implementieren:

IF ((SELECT (A.CREDIT_LIMIT - B.ORDER_TOTAL) 
     FROM CUSTOMERS A , ORDERS B 
     WHERE A.CUSTOMER_ID = 123 
     AND B.CUSTOMER_ID = 123) 
    ) > 0 
    ) THEN 
    INSERT... 
END IF ; 
+0

Vielen Dank. Wie implementieren Sie es im Rahmen von Transaktionen? Können Sie die fragliche Abfrage abschließen? – Danial

+0

Die Verwendung von ** Transaktionen ** muss mit äußerster Sorgfalt analysiert werden. Können Sie erklären, warum brauchen Sie es? – FDavidov

+0

Um zu erfahren, wie Transaktionen die Datengenauigkeit zwischen verschiedenen Tabellen garantieren. – Danial