>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 조건부 삽입을 어떻게 수행할 수 있습니까?

MySQL에서 조건부 삽입을 어떻게 수행할 수 있습니까?

DDD
DDD원래의
2024-12-25 00:03:11716검색

How Can I Perform Conditional Inserts in 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.