[MySQL CRUD] 다양한 INSERT

코린이·2025년 8월 30일

MySQL 쿼리 성능 UP

목록 보기
2/4

INSERT 기본

INSERT INTO users (name, id, password, address, email) 
VALUES ('kim','kim1234','password','서울시 강남구','kim1234@naver.com');

BULK INSERT

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

동적 쿼리 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 IGNORE

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 한다.

DUPLICATE KEY UPDATE

유니크 키값을 조회/비교(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;
;

REPLACE INTO

INSERT 중 중복 데이터를 발견하면 기존 데이터를 삭제하고 새로운 데이터를 INSERT 하는 방법이다.

이는 물리적 데이터를 삭제하는 방법이기 때문에 매우 위험한 방법이다.

REPLACE INTO users (name, id, password, address, email) 
VALUES ('kim','kim1234','password','서울시 강남구','kim1234@naver.com');

0개의 댓글