2017-04-06 8 views
0

두 테이블 ordersproducts이 있습니다. 제품 테이블의 열 이름은 Qty_On_Hand이며,이 제품의 재고량이 저장되어 있습니다. orders 테이블에는 행 번호 Qty이 있으며, 여기서 주문한 금액이 입력됩니다. 주문한 금액에서 상품 테이블의 재고 금액을 갱신하는 방아쇠를 만들려고합니다. 이 테이블은 "ProductID"으로 연결됩니다.주문 수량에서 상품 재고 업데이트 트리거

UPDATE products 
SET products.Qty_On_Hand = Products.Qty_On_Hand - orders. qty 
WHERE products.ProductID = orders.ProductID 

도움이 될 것입니다!

답변

0

트릭을해야합니다. 새 주문을 삽입 할 때마다 실행되는 트리거가 필요합니다.

CREATE TRIGGER QuantityUpdate 
AFTER INSERT 
    ON orders FOR EACH ROW 

BEGIN 

UPDATE products 
SET products.Qty_On_Hand = Products.Qty_On_Hand - New. qty 
WHERE products.ProductID = New.ProductID ; 

END; 
0

트리거를 만드는 방법에 대한 좋은 예가 많이 있습니다. 이것은 내 첫 검색에서 팝업되었습니다 : https://www.sitepoint.com/how-to-create-mysql-triggers/.

주문 금액을 업데이트하거나 삭제할 수 있는지 여부를 고려해야합니다.


그러나 트리거 자체는 훌륭하다고 생각하지만 거의 사용하지 않는 경향이 있습니다. 대부분 잊어 버리기 쉽기 때문입니다. 그런 다음 코드를 철저히 검색하여 코드 자체가 아무런 해답도 제시하지 않는다는 것을 알아낼 수 있습니다. 대답은 데이터베이스에 숨겨져 있습니다. 또는 꽤 반대, 당신은 방아쇠가 거기에 있다는 것을 알고 당신을 위해 당신의 일을 마술 블랙 박스로 간주합니다. 따라서 역효과를 낼 수있는 기능을 두 번 확인하지 마십시오.

https://stackoverflow.com/a/460343/7081773

따라서 당신의 장소에, 나는 (데이터베이스 만에 모든 일을하지 않는 한) 주문에 삽입을 실행하는 코드에 논리를 이동합니다. 물론 주문 수정 기능을 만들어야합니다. 이러한 함수는 주식 수정을 처리합니다. SQL 쿼리 대신 직접 사용할 것입니다. 그러면 코드 기반을보다 잘 제어 할 수 있습니다.

또는 더 나은 경우는 재고 자체를 수정하지 마십시오. 응용 프로그램의 나머지 재고를 읽을 때 주문량을 뺍니다 (아마도 해당보기를 작성할 수 있습니다). 실제로 변경 될 때만 재고 금액을 수정하십시오 (예 : 제품 출고 시점). 이렇게하면 재고가 얼마 남았는지 알 수 있고 주문 수량은 얼마이며 재고 보유량 = 사용 가능한 재고량을 항상 계산할 수 있습니다. 물론 당신이 시작한 것처럼 다른 방향으로 갈 수 있습니다. 그것도 작동합니다. 그것은 단지 내 마음을 위해 조금 더 논리적 인 것처럼 보입니다. 보통 이렇게하면됩니다 ...