집 >데이터 베이스 >MySQL 튜토리얼 >MySQL에서 조건부 삽입을 어떻게 수행할 수 있습니까?
MySQL의 조건부 삽입 이해
조건부 삽입 문을 사용하면 특정 조건이 충족되는 경우에만 테이블에 새 행을 삽입할 수 있습니다. MySQL에는 조건부 삽입을 위한 전용 구문이 없지만 하위 쿼리 및 MERGE 문과 같은 기술을 사용하여 동일한 결과를 얻을 수 있습니다.
샘플 시나리오: 중복 삽입 방지
열(인스턴스, 사용자, 항목)이 포함된 x_table이라는 테이블이 있는 시나리오를 생각해 보세요. 인스턴스 열은 고유하며 특정 사용자가 이미 특정 항목을 가지고 있는 곳에 중복 행을 삽입하지 않으려고 합니다.
예를 들어 행(instance=919191, user=123, item=456) user=123인 x_table에 다른 행이 없는 경우에만 해당 item=456.
하위 쿼리 및 행 선택 사용
이를 달성하려면 하위 쿼리를 사용하여 중복 행이 있는지 확인할 수 있습니다.
INSERT INTO x_table(instance, user, item) SELECT 919191, 123, 456 FROM dual WHERE NOT EXISTS (SELECT * FROM x_table WHERE user = 123 AND item = 456)
이 문에서 이중은 행이 하나만 있는 특수 테이블입니다(원래 Oracle에서 발견되었으며 현재는 MySQL에서도 사용 가능). SELECT 문 내의 하위 쿼리는 단일 데이터 행을 선택하지만 해당 값이 x_table에 아직 없는 경우에만 선택합니다.
대안: MERGE 문 사용
MySQL 또한 버전 8.0에서는 조건부 삽입, 업데이트 및 삭제를 단일 작업으로 처리하는 편리한 방법을 제공하는 전용 MERGE 문을 도입했습니다. 문:
MERGE INTO x_table (instance, user, item) USING ( SELECT 919191, 123, 456 WHERE NOT EXISTS (SELECT * FROM x_table WHERE user = 123 AND item = 456) ) AS new_row ON x_table.user = new_row.user AND x_table.item = new_row.item WHEN NOT MATCHED THEN INSERT (instance, user, item) VALUES (new_row.instance, new_row.user, new_row.item);
MERGE 문은 이전 예와 유사한 하위 쿼리를 사용하여 중복 행이 있는지 확인합니다. 행이 존재하지 않으면(일치하지 않는 경우) 삽입 작업을 실행합니다.
위 내용은 MySQL에서 조건부 삽입을 어떻게 수행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!