MySQL에없는 경우 행을 삽입하는 방법

Rayven Esplanada 2023년1월30일
  1. MySQL에없는 경우REPLACE를 사용하여 삽입
  2. MySQL에없는 경우INSERT IGNORE를 사용하여 삽입
  3. INSERT ... ON DUPLICATE KEY UPDATE를 사용하여 MySQL에없는 경우 삽입
MySQL에없는 경우 행을 삽입하는 방법

이 자습서에서는 mySQL에 아직없는 경우 테이블에 행을 삽입하는 방법을 보여줍니다.

REPLACE, INSERT IGNORE 또는INSERT ... ON DUPLICATE KEY UPDATE를 사용하여이 문제를 해결하는 간단한 세 가지 방법이 있습니다.

먼저 다음과 같이 구성된 테이블person이 있다고 가정 해 봅시다.

CREATE TABLE person (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT NOT NULL,
address VARCHAR(128) 
);

다음 기존 레코드 사용 :

id name age address
1 John Doe 27 New York, New York
2 Jane Doe 26 Berlin, Germany
3 Chun Li 24 Beijing, China
4 Thor Odinson 40 Asgard

이제 실제 솔루션을 살펴 보겠습니다.

MySQL에없는 경우REPLACE를 사용하여 삽입

REPLACE가하는 일은 발견되면 기존 레코드를 덮어 쓰는 것입니다. 아직 존재하지 않으면 새 행을 삽입합니다. 본질적으로UPDATE와 비슷하지만INSERT 기능이 있습니다.

John Doe에게REPLACE를 실행하는 샘플 쿼리를 제공하겠습니다.

REPLACE INTO 'person'
SET id = 1,
name = 'John Doe'`,
age = 28,
address = 'Los Angeles, California'

John Doe가 있으면 새 데이터로 덮어 씁니다. 그렇지 않으면 John Doe에 대한 새 항목이 생성됩니다.

그러나이 방법은 기존 레코드가 발견되면 건너 뛰는 대신 기존 레코드를 덮어 쓰므로 삽입에 효율적이지 않습니다. 일을 완수하더라도 최선의 방법은 아닙니다.

John Doe를 선택하는 쿼리의 새로운 결과는 다음과 같습니다.

id name age address
1 John Doe 28 Los Angeles, California

John Doe의 나이와 주소는REPLACE 스크립트에 의해 수정되거나 업데이트되었습니다.

MySQL에없는 경우INSERT IGNORE를 사용하여 삽입

이를 위해 위의 표에서 편집되지 않은 동일한 데이터를 사용합니다.

INSERT IGNORE에서 레코드의 기본 키가 이미 데이터베이스에 있으면 조용히 무시되거나 건너 뜁니다.

IGNORE키워드를 제거하면 ID 또는 기본 키가있는 레코드를 삽입하면 쿼리가 중단되고 기본 키가있는 레코드가 이미 존재한다는 오류 메시지가 표시됩니다.

INSERT 이후IGNORE는 오류로 인한 낙태 대신에 새 레코드를 삽입하지 않고 쿼리를 계속합니다.

INSERT IGNORE person
SET 'id' = 4,
age = 1000,
address = 'Chicago'

위에서 선언 한 테이블에 따라id 또는 기본 키4가있는 레코드가 이미 존재합니다 (Thor Odinson). 따라서이 쿼리는 스크립트에서 무시되므로 데이터베이스에 레코드를 업데이트하거나 삽입하지 않습니다.

person에서 Thor를 쿼리하면 결과는 다음과 같습니다.

id name age address
4 Thor Odinson 40 Asgard

쿼리의 나이와 주소는id가 4 인 행에 전혀 영향을주지 않았습니다.

INSERT ... ON DUPLICATE KEY UPDATE를 사용하여 MySQL에없는 경우 삽입

ON DUPLICATE KEY UPDATE 절을 사용하고 삽입하려는 행이UNIQUE 인덱스 또는 기본 키에 중복 된 경우 행은 UPDATE.

이것은 본질적으로REPLACE가하는 것과 같은 일을합니다.

id가 2 인 레코드를 삽입한다고 가정 해 보겠습니다.

INSERT INTO person (id, name, age, address)
VALUES (1, 'Jane Deer', '33', 'Tallahassee Florida')
ON DUPLICATE KEY UPDATE id = id+1;

id는 기존 레코드를 업데이트하는 대신 새 레코드를 생성하도록 증가됩니다.

person의 모든 행을 쿼리하면 결과는 다음과 같습니다.

id name age address
1 John Doe 27 New York, New York
2 Jane Doe 26 Berlin, Germany
3 Chun Li 24 Beijing, China
4 Thor Odinson 40 Asgard
5 Jane Deer 33 Tallahasee, Florida

Jane Doe를 대체하는 대신 Jane Deer가 테이블에 새 레코드로 추가됩니다.

삽입 및 존재 여부를 확인하는 가장 효율적인 방법은 INSERT IGNORE를 사용하는 것입니다.

그러나 두 개의 다른 키워드도 사례별로 사용할 수 있습니다. 삽입하려는 행이있는 경우 업데이트하려면REPLACE를 사용하십시오. 행을 수정하지 않고 실제로 새 레코드를 삽입하려면INSERT ... ON DUPLICATE KEY UPDATE를 사용하십시오.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn