2016-12-06 11 views
0

私は、ACIDトランザクションを使用してテーブルに対するデータの一貫性の例を探していました。私はここの例を見た:http://microservices.io/patterns/data/shared-database.html summeryは以下の通りです:CUSTOMERテーブルにはCREDIT_LIMITという列があります。そのユーザーのOrderPrice < CREDIT_LIMITの新しいレコードをORDERテーブルに挿入します。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 

チュートリアルによると、2つのテーブル上のデータの一貫性を保つために、クエリで「もしチェック」があるはずです:例で記述されたクエリが続くと、私はそれが完了していないと信じています。誰でもクエリを完了できますか?私は感謝します。

答えて

1

私は違っこれを実装します:

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

おかげで多くのことを。どのようにトランザクションのコンテキストでそれを実装していますか?問題のクエリを完了できますか? – Danial

+0

**トランザクション**の使用は、細心の注意を払って分析する必要があります。なぜあなたはそれを必要としているのか説明できますか? – FDavidov

+0

トランザクションが異なるテーブル間でデータの正確性をどのように保証するかを知る。 – Danial