문서의 이전 판입니다!
| 물리명 | 논리명 | 타입 | KEY |
|---|---|---|---|
| 시퀀스 | seq | 숫자 | PK |
| 제목 | title | 문자 | |
| 내용 | content | 문자 |
-- MySQL/MariaDB & MSSQL & PostgreSQL CREATE TABLE ex_merge ( seq BIGINT NOT NULL PRIMARY KEY, title VARCHAR(100) NOT NULL, content TEXT NOT NULL ); -- Oracle/Tibero CREATE TABLE ex_merge ( seq NUMBER NOT NULL PRIMARY KEY, title VARCHAR(100) NOT NULL, content CLOB NOT NULL );
-- MySQL 4.1 이상 -- 조건은 PK, UK 컬럼만 가능 INSERT INTO ex_merge ( seq , title , content ) VALUES ( 1 , '제목 INSERT' , '내용 INSERT' ) ON DUPLICATE KEY UPDATE title = '제목 UPDATE' , content = '내용 UPDATE' ;
-- MSSQL 2008 이상 MERGE INTO ex_merge a USING (SELECT 1 AS dummy) b ON a.seq = 1 WHEN MATCHED THEN UPDATE SET title = '제목 UPDATE' , content = '내용 UPDATE' WHEN NOT MATCHED THEN INSERT ( seq , title , content ) VALUES ( 1 , '제목 INSERT' , '내용 INSERT' ) ;
-- Oracle 9i 이상 MERGE INTO ex_merge USING DUAL ON (seq = 1) WHEN MATCHED THEN UPDATE SET title = '제목 UPDATE' , content = '내용 UPDATE' WHEN NOT MATCHED THEN INSERT ( seq , title , content ) VALUES ( 1 , '제목 INSERT' , '내용 INSERT' ) ;
-- PostgreSQL 9.5 미만 WITH upsert AS ( UPDATE SET title = '제목 UPDATE' , content = '내용 UPDATE' WHERE seq = 1 RETURNING * ) INSERT INTO ex_merge ( seq , title , content ) SELECT 1 , '제목 INSERT' , '내용 INSERT' WHERE NOT EXISTS (SELECT * FROM upsert) ; -- PostgreSQL 9.5 이상 -- 조건은 PK, UK 컬럼만 가능 INSERT INTO ex_merge ( seq , title , content ) VALUES ( 1 , '제목 INSERT' , '내용 INSERT' ) ON CONFLICT (seq) DO UPDATE SET title = '제목 UPDATE' , content = '내용 UPDATE' ; -- PostgreSQL 15 이상 MERGE INTO ex_merge a USING (SELECT 1 AS dummy) b ON a.seq = 1 WHEN MATCHED THEN UPDATE SET title = '제목 UPDATE' , content = '내용 UPDATE' WHEN NOT MATCHED THEN INSERT ( seq , title , content ) VALUES ( 1 , '제목 INSERT' , '내용 INSERT' ) ;