일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- AOP
- 리눅스
- SpringJDBC
- 마이바티스
- 컨테이너
- POJO
- spring framework
- Ubunt
- Di
- pointcut
- Framework
- myBatis
- @Spring-Test
- Linux
- unix
- @test
- 프로퍼티
- Spring Boot
- Dependency Injection
- @JUnit
- java spring
- STS
- XML
- spring aop
- Spring JDBC
- JdbcTemplate
- @AspectJ
- spring
- JDBC TEMPLATE
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