모든 어플리케이션에서는 데이터베이스 테이블에 레코드를 추가하고, 해당 테이블에 저장되는 정보를 변경해야 한다.

UPDATE 문은 데이터베이스에 이미 저장된 데이터를 변경하고, INSERT 문은 테이블에 새 레코드를 추가한다.

UPSERT 문은 INSERT와 UPDATE의 조합으로 업데이트를 수행하거나 레코드가 아직 없는 경우 추가한다.

UPDATE

UPDATE 문은 사용자가 지정한 새 정보로 현재 레코드를 업데이트한다.

예를 들어, 사용자의 연락처 정보를 이동하고, 변경할 수 있으며, UPDATE 문이 변경을 수행한다. 데이터베이스에서 변경하는 모든 내용은 UPDATE문을 사용한다.

대부분의 SQL UPDATE 문에서는 WHERE 절을 사용한다. WHERE 절은 업데이트할 레코드를 결정하고 다른 레코드는 그대로 둔다. UPDATE 문을 실행할 때 WHERE 절을 사용하지 않으면 데이터베이스는 데이터베이스의 모든 레코드를 변경하며, 이는 오류를 불러이르킬 가능성이 높다. 이러한 실수를 방지하기 위해서는 SQL 문에 WHERE 절이 있는지 확인해야 한다.

UPDATE 문 구문은 사용하는 데이터베이스 엔진에 따라 다르다. MySQL 혹은 Oracle SQL 데이터베이스는 UPDATE 문에 유사한 구문을 사용한다.

다음 예시는 사용자의 ID가 11인 경우 사용자의 이름을 “엄준식”으로 변경하는 구문이다.

UPDATE Users SET username = `엄준식` WHERE id = 11;

INSERT

테이블에 새 레코드를 추가하기 위해서는 INSERT 문을 사용한다. 대부분의 데이터베이스에서는 모든 레코드에 고유 식별자를 제공하기 위해 기본 열을 생성한다. 고유 식별자는 자동으로 채워지기 때문에 수동으로 삽입하지 않고 데이터베이스 엔진이 대신 수행하도록 한다.

식별자 행에 중복된 값을 삽입할 수는 없기 때문에 데이터베이스가 이를 수행하도록 허용하는 것이 더 효율적이다.

다음 예시는 해당 열에 “장지환”이라는 사용자를 추가하는 구문이다.

INSERT INTO Users (username) VALUES (`장지환`);

UPDATE 와 INSERT

대부분의 어플리케이션에서는 여러 UPDATE 및 INSERT 문을 사용하여 데이터를 관리한다.

INSERT 문은 레코드를 추가해야 할 때 필요하며, 이미 저장된 데이터를 변경하는 경우 UPDATE 문이 필요하다.

INSERT 문에는 필요한 값으로 채워져야 하는 모든 열이 필요하다. UPDATE 문에는 WHERE 절이 필요하며, 이를 제외하는 경우는 모든 레코드가 지정된 데이터로 업데이트 된다. 모든 레코드를 업데이트할 가능성은 거의 없기 때문에 WHERE 절을 포함해야 한다.

UPSERT

UPSERT 명령은 행이 아직 존재하지 않는 경우에만 행을 삽입하려는 경우 유용한 명령이다. 이미 존재하는 경우 데이터베이스는 대신 새 정보로 레코드를 업데이트한다.

Oracle 데이터베이스 엔진에서는 특정 UPSERT 명령이 존재하며, MySQL에서는 REPLACE라는 용어가 대신 사용된다.

다음은 UPSERT 문을 사용하는 예시이다. 해당 구문은 ID가 11에 사용자가 존재하는 경우 사용자의 이름을 “김찬호”로 변경하고, ID가 11이 존재하지 않는 경우 사용자의 이름이 “김찬호”인 사용자를 추가한다.

MySQL

REPLACE INTO Users (id, username) VALUES (11, `김찬호`);

Oracle SQL

UPSERT INTO Users (id, username) VALUES (11, `김찬호`);

UPSERT vs UPDATE & INSERT

사용하는 명령은 데이터베이스의 데이터로 수행하려는 작업에 따라 다르다.

성능 측면에서는 INSERT가 UPSERT보다 우수하지만 항상 UPDATE 문의 사용을 피할 수 없으며, 레코드가 이미 존재하지 않는지 확인하는 방법이 필요하다.

UPSERT 문은 저장 프로시저에 더 긴 IF 문을 작성하는 대신 전체 프로세스를 단순화 한다.

SQL에서 INSERT를 사용하는 경우

테이블에 레코드를 추가하려면 INSERT 문이 필요하다. 새로운 사용자를 추가하거나, 새로운 제품을 주문할 때 마다 데이터베이스는 INSERT 문을 사용하여 데이터베이스에 새 레코드를 추가한다. 새 레코드는 이후 UPDATE 문을 사용하여 변경할 수 있지만, 먼저 INSERT 문을 사용하여 생성된다.

SQL에서 UPDATE를 사용하는 경우

데이터베이스 테이블의 데이터를 변경하는 유일한 방법은 UPDATE 문을 사용하는 것이다. 어플리케이션은 다양한 이유로 지속적으로 데이터를 변경하며 UPDATE 문을 사용한다.

SQL에서 UPSERT를 사용하는 경우

UPSERT 문은 세 명령 중 성능이 가장 낮지만 테이블에 추가할 레코드가 여러 개 있을 때, 중복으로 추가하고 싶지 않을 때 사용한다.

참고

  • https://blog.purestorage.com/purely-informational/sql-update-vs-insert-vs-upsert/