2016-12-06 82 views
0

我正在通過使用ACID事務查找表上的數據一致性示例。我在這裏看到了這個例子:http://microservices.io/patterns/data/shared-database.html summery如下:CUSTOMER表有一列CREDIT_LIMIT。我們想在ORDER表中插入一條新記錄如果OrderPrice < CREDIT_LIMIT該用戶。在本例中書面查詢如下,我相信它是不完整的: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 

按照教程,以保持數據的一致性超過20桌,應該有一個「如果檢查」中查詢。任何人都可以完成查詢?我將不勝感激。

回答

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