2016-12-06 6 views
0

Je cherchais un exemple de cohérence des données sur des tables en utilisant la transaction ACID. J'ai vu l'exemple ici: http://microservices.io/patterns/data/shared-database.html estival est comme suit: table CLIENT a une colonne CREDIT_LIMIT. nous voulons insérer dans la table ORDER un nouvel enregistrement si OrderPrice < CREDIT_LIMIT de cet utilisateur. requête écrite dans l'exemple est le suivant et je crois qu'il est pas complète:Insertion conditionnelle dans 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 

Selon le tutoriel, pour maintenir la cohérence des données sur 2 tables, il devrait y avoir un « Si le contrôle » dans la requête. Tout le monde peut compléter la requête? J'apprécierais.

Répondre

1

Je mettre en œuvre différemment:

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

Merci beaucoup. Comment l'implémentez-vous dans le contexte des transactions? pouvez-vous compléter la requête en question? – Danial

+0

L'utilisation de ** transactions ** doit être analysée avec le plus grand soin. Pourriez-vous expliquer pourquoi en avez-vous besoin? – FDavidov

+0

Pour savoir comment les transactions garantissent la précision des données entre différentes tables. – Danial