DB/MariaDB

INSERT ON DUPLICATE KEY UPDATE

원2 2022. 2. 28. 16:18
728x90
반응형

 

 

INSERT ... ON DUPLICATE KEY UPDATE 는 INSERT 문의 MariaDB/Mysql 확장문으로,

중복된 고유 키 또는 기본 키를 찾으면 INSERT 대신 UPDATE를 실행한다.

 

둘 이상의 고유 인덱스가 일치하면 첫 번째 인덱스만 업데이트 된다.

따라서 둘 이상의 고유 인덱스가 있는 테이블에서는 이 문을 사용하지 않는 것이 좋다.

 

 


예시

 

CREATE TABLE food (id INT PRIMARY KEY, menu VARCHAR(30));
INSERT INTO food VALUES (1,'라면'), (2,'쫄면'), (3,'밀면');

 

기존의 키가 없다면 명령문이 그냥 insert 로 실행된다.

 

INSERT INTO food VALUES (4,'김밥') 
  ON DUPLICATE KEY UPDATE menu='김밥';

 

SELECT * FROM food;


 

위의 상태에서 그냥 inset 문을 입력하면?

 

INSERT INTO food VALUES (1,'냉면');

 

 

1번의 primary key가 존재한다고 실행되지 않는다.

 

그렇지만

아래처럼 입력하면 1번 키에 값이 입력이 된다.

INSERT INTO food VALUES (1,'소주') 
  ON DUPLICATE KEY UPDATE menu='소주';

 


두개 이상의 행이 영향을 받을 때

 

유니크 키를 추가

ALTER TABLE food ADD id2 INT;
UPDATE food SET id2=id+10;
ALTER TABLE food ADD UNIQUE KEY(id2);

이 상태에서

 

INSERT INTO food VALUES (2,'맥주',13) 
  ON DUPLICATE KEY UPDATE menu='맥주';

 

이런식으로 primary key 와 unique key가 해당되는 2개의 행이 영향을 받게 된다면

아래처럼 둘중에 하나의 컬럼만 영향을 받게 되니 주의하자.

그냥 두개의 행에 영향을 받게 하지 말자.

 

728x90
반응형

'DB > MariaDB' 카테고리의 다른 글

데이터 정규화  (0) 2024.03.22
IFNULL  (0) 2022.02.17
데이터베이스 사용자 비밀번호 변경 & 권한 관리  (0) 2022.02.11
특정 DB 내에 존재하는 모든 컬럼 목록을 한번에 조회  (0) 2022.01.20
더미데이터 넣기  (0) 2021.11.12
BINARY (대소문자 구분)  (0) 2021.11.12