| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
													Tags
													
											
												
												- java
 - @JUnit
 - Framework
 - 프로퍼티
 - 리눅스
 - unix
 - @AspectJ
 - STS
 - POJO
 - AOP
 - pointcut
 - Di
 - 컨테이너
 - JdbcTemplate
 - Dependency Injection
 - myBatis
 - @Spring-Test
 - JDBC TEMPLATE
 - Spring Boot
 - 마이바티스
 - Spring JDBC
 - SpringJDBC
 - Linux
 - spring aop
 - java spring
 - Ubunt
 - @test
 - spring
 - XML
 - spring framework
 
													Archives
													
											
												
												- Today
 
- Total
 
개키우는개발자 : )
PostgreSQL UPSERT 문법 본문
반응형
    
    
    
  UPSERT 문
INSERT를 시도할때 조건(상황)에 따라 UPDATE를 할 수 있는 구문입니다. 복잡한 업무 처리에 자주 사용 됩니다.
기본문법
- INSERT가 충돌 시 다른 액션을 취합니다.
INSERT
	INTO
	TABLE_NAME(COLUMN_1)
VALUES(VALUE_1) ON
CONFLICT TARGET ACTION;
실습준비
- CUSTOMERS 테이블 생성 후 데이터 저장
CREATE TABLE CUSTOMERS 
(
	CUSTOMER_ID SERIAL PRIMARY KEY,
	NAME VARCHAR UNIQUE,
	EMAIL VARCHAR NOT NULL,
	ACTIVE BOOL NOT NULL DEFAULT TRUE
);
INSERT INTO CUSTOMERS (NAME,EMAIL)
VALUES
('IBM','CONTACT@IBM.COM'),
('MICROSOFT','CONTACT@MICROSOFT.COM'),
('INTEL','CONTACT@INTEL.COM');
COMMIT;
NAME 컬럼이 UNIQUE 제약 조건이므로 중복된 데이터는 저장할 수 없습니다.

실습
- CUSTOMERS 테이블에 NAME,EMAIL을 INSERT 하는데 NAME값이 중복되어 충돌이 발생했을때 아무 일도 없도록 적용 합니다.
INSERT
	INTO
	CUSTOMERS(NAME,
	EMAIL)
VALUES ('MICROSOFT',
'HOTLINE@MICROSOFT.COM') ON
CONFLICT (NAME) DO NOTHING;
COMMIT;
기존 CUSTOMERS테이블의 NAME 값 중 MICROSOFT는 존재 하기 때문에 충돌이 발생 합니다.
ON CONFLICT (NAME) DO NOTHING 문을 사용하여 NAME이 충돌시 아무 것도 실행하지 않습니다.

- CUSTOMERS 테이블에 NAME,EMAIL을 INSERT 하는데 NAME값이 중복되어 충돌시 EMAIL값은 INSERT할 때 작성한 EMAIL값과 현재 적용되어 있는 EMAIL값을 UPDATE하세요
INSERT
	INTO
	CUSTOMERS(NAME,
	EMAIL)
VALUES ('MICROSOFT',
'HOTLINE@MICROSOFT.COM') ON
CONFLICT (NAME) DO
UPDATE
SET
	EMAIL = EXCLUDED.EMAIL || ';' || CUSTOMERS.EMAIL;
COMMIT;
INSERT 시 작성한 HOTLINE@MICROSOFT.COM 기존의 CONTACT@MICROSOFT.COM값이 수정되어 있는것을 볼 수 있습니다.

EXCLUDED.EMAIL = INSERT를 시도하는 데이터
CUSTOMERS.EMAIL = 기존에 저장되어 있는 데이터
반응형
    
    
    
  'PostgreSQL > 데이터 조작 및 테이블 관리' 카테고리의 다른 글
| PostgreSQL IMPORT 작업 (0) | 2019.11.17 | 
|---|---|
| PostgreSQL EXPORT 작업 (0) | 2019.11.16 | 
| PostgreSQL DELETE 문 (0) | 2019.11.16 | 
| PostgreSQL UPDATE JOIN 문 (0) | 2019.11.16 | 
| PostgreSQL UPDATE 문 (2) | 2019.11.16 | 
			  Comments