MySQL에없는 경우 행을 삽입하는 방법
-
MySQL에없는 경우
REPLACE
를 사용하여 삽입 -
MySQL에없는 경우
INSERT IGNORE
를 사용하여 삽입 -
INSERT ... ON DUPLICATE KEY UPDATE
를 사용하여 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
를 사용하십시오.
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