Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

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 | 

ON DUPLICATE KEY UPDATE 절

설명

INSERT 문에 ON DUPLICATE KEY UPDATE 절을 명시하여 UNIQUE 인덱스 또는 PRIMARY KEY 제약 조건이 설정된 칼럼에 중복된 값이 삽입되는 상황에서 에러를 출력하지 않고 새로운 값으로 갱신할 수 있다.

ON DUPLICATE KEY UPDATE 절은 INSERT 또는 UPDATE에 대한 트리거가 활성화된 테이블에 대해서는 사용할 수 없으며, 중첩된 INSERT 문에서도 사용할 수 없다.

구문

<INSERT … VALUES statement>

<INSERT … SET statement>

<INSERT … SELECT statement>

    INSERT ...

    [ON DUPLICATE KEY UPDATE column_name = expr, ... ]

  • column_name = expr : ON DUPLICATE KEY UPDATE 뒤에 칼럼 값을 변경하고자 하는 칼럼 이름을 명시하고, 등호 부호를 이용하여 새로운 칼럼 값을 명시한다.
예제

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

CREATE TABLE a_tbl3 LIKE a_tbl1;

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

SELECT * FROM a_tbl3;

           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

INSERT INTO a_tbl3 VALUES(2, 'bbb', '222-2222');

 

ERROR: Operation would have caused one or more unique constraint violations.

 

--insert duplicated value with specifying ON DUPLICATED KEY UPDATE clause

INSERT INTO a_tbl3 VALUES(2, 'bbb', '222-2222')

ON DUPLICATE KEY UPDATE phone = '222-2222';

 

SELECT * FROM a_tbl3 WHERE id=2;

           id  name                  phone

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

            2  'bbb'                 '222-2222'