레코드 중복 확인 한다음 없으면 insert를 있으면 update를 할려고 합니다.
구글링을 해보니 duplicate key update라는 기능이 mysql에서는 존재하고
postgresql에서는 존재하지 않는다고 합니다..
혹시 이 비슷한 기능이 뭐가 있는지 아시면 알려주세요 ㅠㅠ
도와주세여 고수 님들..
upsert 구문이 있습니다.
자세한 것은 검색하시고
UK 나 PK가 있어야하는 제약사항이 있습니다.
insert를 하면 글자가 깨지는 현상이 일어납니다 ㅠㅠㅠㅠㅠㅠ; cmd창 언어셋팅이 잘못된걸까요? ㅠㅠ
쿼리 상에서 그런가요?
update employee
set
emp_nm = N'지현명'
where emp_id = 1;
한글 앞에 N붙이고 해보세요.
아니면 java에서 그런거면 다른 방법을 알려드릴께요
show client_encoding;
인코딩을 확인하세요
다음과 같이 하시면 됩니다.
1. 일단 테이블을 생성
create table table1(id int, data varchar(20), primary key(id));
2. SQL
WITH AAA (id, data) as (
values
(2, 'BBBBBB') <= 이부분에 입력할 값을 지정한다.
),
BBB as
(
update table1 m
set data = nv.data
FROM AAA nv
WHERE m.id = nv.id
RETURNING m.* <= 동일 id가 있으면 이부분이 실행됨
)
INSERT INTO table1 (id, data)
SELECT id, data
FROM AAA
WHERE NOT EXISTS
(SELECT 1 FROM BBB up WHERE up.id = AAA.id) <= 동일 id가 없으면 이부분이 실행됨
윗 쿼리는 9.4 이하 버전에서 사용하던 쿼리입니다. 해당 쿼리는 테이블 전체를 잠그지 않는함 자료 무결성이 깨질 가능성이 있습니다.
9.5 이상 버전을 사용한다면, insert ... on conflict 구문을 사용하세요.