MySQL의 조건부 INSERT 문
질문: INSERT 작업을 조건부로 수행하는 것이 가능합니까? IF 문?
설명:
제품 ID가 2인 항목 20개를 주문해야 한다고 가정합니다. 충분한 재고를 확보하기 위해 먼저 보유 수량을 확인합니다. :
SELECT IF( ( SELECT SUM(qty) FROM orders WHERE product_id = 2 ) + 20 <= ( SELECT qty_on_hand FROM products WHERE id = 2) , 'true', 'false');
결과가 true이면 INSERT 쿼리를 실행합니다. 그러나 이 접근 방식은 동시성 문제에 취약합니다. 여러 동시 주문으로 인해 초과 판매가 발생할 수 있습니다.
답변:
예, 다음 구문을 사용하면 조건부 INSERT 문이 가능합니다.
INSERT INTO TABLE SELECT value_for_column1, value_for_column2, ... FROM wherever WHERE your_special_condition
If SELECT 문은 행을 반환하지 않으며(즉, 특수 조건이 false인 경우) 삽입이 발생하지 않습니다.
예:
지정된 스키마의 경우:
products: id, qty_on_hand orders: id, product_id, qty
insert into orders (product_id, qty) select 2, 20 where (SELECT qty_on_hand FROM products WHERE id = 2) > 20;
이 쿼리는 재고가 충분한 경우에만 행을 삽입합니다. 그렇지 않으면 삽입이 실행되지 않습니다.
위 내용은 MySQL INSERT 문을 조건부로 만들 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!