REPLACE 문은 INSERT 문과 유사하지만, PRIMARY KEY와 UNIQUE 제약 조건이 정의된 컬럼에 중복된 값을 삽입하면 기존 레코드를 삭제한 후 새로운 레코드를 삽입한다(INSERT 문은 에러를 출력한다). REPLACE 문은 삽입 또는 삭제 후 삽입을 수행하므로, REPLACE 문을 사용하기 위해서는 테이블에 대한 INSERT와 DELETE 권한을 동시에 가지고 있어야 한다.
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;
;xr
=== <Result of SELECT Command in Line 1> ===
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;
;xr
=== <Result of SELECT Command in Line 1> ===
id name phone
=========================================================
3 'ccc' '333-3333'
1 'aaa' '111-1111'
2 'bbb' '222-2222'
6 'fff' '000-0000'
4 rows selected.