我正在寻找一个使用ACID事务对表进行数据一致性的示例。我在这里看到了这个例子:http://microservices.io/patterns/data/shared-database.html summery如下:CUSTOMER表有一列CREDIT_LIMIT。我们想在ORDER表中插入一条新记录如果OrderPrice<该用户的CREDIT_LIMIT。示例中的书面查询如下,我认为它不完整:
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个表的数据一致性,查询中应该有“If check”。任何人都可以完成查询?我将不胜感激。
答案 0 :(得分: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 ;