INSERT INTO users (name, id, password, address, email)
VALUES ('kim','kim1234','password','서울시 강남구','kim1234@naver.com');
INSERT INTO users (name, id, password, address, email)
VALUES ('kim','kim1234','password','서울시 강남구','kim1234@naver.com')
, ('lee','lee999','password','서울시 노원구','lee999@naver.com')
, ('park','park12','password','서경기도 성남시','park12@naver.com');
동적 쿼리 INSERT는 클라이언트 레벨에서 사용하는 것을 추천
# 동적 쿼리 준비
PREPARE users_insert FROM
'INSERT INTO users (name, id, password, address, email) VALUES (?, ?, ?, ?, ?)';
# 변수 지정
SET @name = 'kim';
SET @id = 'kim1234';
SET @password = 'password';
SET @address = '서울시 강남구';
SET @email = 'kim1234@naver.com';
# 동적 쿼리 실행
EXECUTE users_insert USING @name, @id, @password, @address, @email;
# 동적 쿼리 해재
DEALLOCATE PREPARE users_insert;
1만 건 이상의 대용량 데이터의 경우 동적 쿼리 INSERT보다 BULK INSERT가 더 효율적일 수 있다.
INSERT INTO users (name, id, password, address, email)
VALUES ('kim','kim1234','password','서울시 강남구','kim1234@naver.com')
, ('lee','lee999','password','서울시 노원구','lee999@naver.com')
, ('lee','lee999','password','서울시 도봉구','lee999@naver.com') # 무시하고 아래 ROW 진행
, ('park','park12','password','서경기도 성남시','park12@naver.com');
기존 테이블 또는 INSERT 구분에 중복된 데이터가 있으면 에러 반환 없이 해당 중복 데이터 ROW를 무시하고 다음 ROW를 INSERT 한다.
유니크 키값을 조회/비교(SELECT)한 후 INSERT 또는 UPDATE를 실행한다.
DUPLICATE KEY UPDATE는 성능적으로 좋은 방법은 아니다. INSERT 하기 전 키값을 먼저 조회(SELECT)하기 때문에 부수적인 작업이 추가로 드는 방법이다.INSERT INTO users (name, id, password, address, email)
VALUES ('kim','kim1234','password','서울시 강남구','kim1234@naver.com')
ON DUPLICATE KEY UPDATE
password = VALUES(password)
, address = VALUES(address)
, update_dt = CURRENT_TIMESTAMP;
;
INSERT 중 중복 데이터를 발견하면 기존 데이터를 삭제하고 새로운 데이터를 INSERT 하는 방법이다.
이는 물리적 데이터를 삭제하는 방법이기 때문에 매우 위험한 방법이다.
REPLACE INTO users (name, id, password, address, email)
VALUES ('kim','kim1234','password','서울시 강남구','kim1234@naver.com');