【问题标题】:Conditional insert in SQLSQL中的条件插入
【发布时间】:2016-12-06 16:45:37
【问题描述】:

我正在寻找一个使用 ACID 事务在表上保持数据一致性的示例。我在这里看到了这个例子:http://microservices.io/patterns/data/shared-database.html 总结如下: CUSTOMER 表有一列 CREDIT_LIMIT。我们想在 ORDER 表中插入一条新记录 If OrderPrice

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 个表的数据一致性,查询中应该有一个“如果检查”。任何人都可以完成查询?我将不胜感激。

【问题讨论】:

    标签: sql acid sqltransaction


    【解决方案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 ;
    

    【讨论】:

    • 非常感谢。您如何在事务的上下文中实现它?你能完成有问题的查询吗?
    • 需要非常小心地分析事务的使用。你能解释一下为什么需要它吗?
    • 了解事务如何保证不同表之间的数据准确性。
    • 我明白了...我建议您将精力集中在文档上,因为设置此功能接管的场景并非易事。祝你阅读愉快!!!
    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多