Versions available for this page: CUBRID 8.3.0 | CUBRID 8.3.1 | CUBRID 8.4.0 | CUBRID 8.4.1 | CUBRID 8.4.3 | CUBRID 9.0.0 |
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;
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'