REPLACE

설명

REPLACE 문은 INSERT 문과 유사하지만, PRIMARY KEYUNIQUE 제약 조건이 정의된 컬럼에 중복된 값을 삽입하면 기존 레코드를 삭제한 후 새로운 레코드를 삽입한다(INSERT 문은 에러를 출력한다). REPLACE 문은 삽입 또는 삭제 후 삽입을 수행하므로, REPLACE 문을 사용하기 위해서는 테이블에 대한 INSERTDELETE 권한을 동시에 가지고 있어야 한다.

REPLACE 문은 새로운 레코드에 의한 PRIMARY KEY 또는 UNIQUE 인덱스 컬럼 값 중복을 판단하므로, PRIMARY KEY 또는 UNIQUE 인덱스가 정의되지 않은 테이블에 대해서는 INSERT 문을 사용하는 것이 성능 상 유리하다. REPLACE 문은 SQL 표준을 확장한 질의문이며, 다음을 참고하여 사용한다.

구문

<REPLACE … VALUES statement>

REPLACE [INTO] table_name [(column_name, ...)]

    {VALUES | VALUE}({expr | DEFAULT}, ...)[,({expr | DEFAULT}, ...),...]

 

<REPLACE … SET statement>

REPLACE [INTO] table_name

    SET column_name = {expr | DEFAULT}[, column_name = {expr | DEFAULT},...]

 

<REPLACE … SELECT statement>

REPLACE [INTO] table_name [(column_name, ...)]

    SELECT...

예제

--creating a new table having the same schema as a_tbl1

CREATE TABLE a_tbl4 LIKE a_tbl1;

INSERT INTO a_tbl4 SELECT * FROM a_tbl1 WHERE id IS NOT NULL and name IS NOT NULL;

SELECT * FROM a_tbl4;

           id  name                  phone

=========================================================

            1  'aaa'                 '000-0000'

            2  'bbb'                 '000-0000'

            3  'ccc'                 '333-3333'

            6  'eee'                 '000-0000'

 

--insert duplicated value violating UNIQUE constraint

REPLACE INTO a_tbl4 VALUES(1, 'aaa', '111-1111'),(2, 'bbb', '222-2222');

REPLACE INTO a_tbl4 SET id=6, name='fff', phone=DEFAULT;

 

SELECT * FROM a_tbl4;

           id  name                  phone

=========================================================

            3  'ccc'                 '333-3333'

            1  'aaa'                 '111-1111'

            2  'bbb'                 '222-2222'

            6  'fff'                 '000-0000'