반응형
MySQL에서 데이터를 새로 추가할 때 가장 먼저 사용하게 되는 명령어는 바로 INSERT이다.
이 명령어는 단순한 것 같지만, 다양한 방식의 삽입과 주의사항,
그리고 실무에서 활용할 수 있는 다양한 응용 형태를 포함하고 있다.

🔍 INSERT INTO란?
INSERT INTO는 MySQL에서 새로운 행(Row)을 테이블에 추가하는 명령어이다.
기본적인 구문은 아래와 같다.
INSERT INTO 테이블명 (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...);
- 테이블명: 데이터를 삽입할 대상 테이블
- 컬럼명: 삽입할 데이터가 들어갈 컬럼(열) 목록
- VALUES: 실제 삽입할 값들
컬럼 순서와 값의 순서는 반드시 일치해야 하며, 컬럼을 생략하는 경우 테이블 전체 구조를 알아야 한다.
반응형
✅ INSERT 기본 예제
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
INSERT INTO users (id, name, age) VALUES (1, '김철수', 28);
위 코드는 users라는 테이블에 하나의 사용자 데이터를 추가하는 기본 예제이다.
⚙️ 컬럼명 생략도 가능할까?
-- 테이블 컬럼 순서를 정확히 알고 있다면 생략 가능
INSERT INTO users VALUES (2, '이영희', 31);
하지만 이 방식은 테이블 구조가 바뀔 경우 오류가 발생할 수 있어 명시적으로 컬럼명을 작성하는 것을 권장한다.
반응형
🧪 실전 예제 1 – 다중 행 INSERT
한 번에 여러 행을 추가할 수도 있다. 이는 성능 측면에서도 매우 유리하다.
INSERT INTO users (id, name, age)
VALUES
(3, '박민수', 25),
(4, '최지은', 32),
(5, '홍길동', 29);
이 방식은 반복 INSERT보다 훨씬 빠르며, 특히 대량의 데이터를 초기 등록할 때 많이 사용된다.
🧪 실전 예제 2 – SELECT 결과를 기반으로 INSERT
다른 테이블의 데이터를 복사하거나 파생 테이블을 만들 때는 INSERT INTO ... SELECT 문을 사용한다.
INSERT INTO archive_users (id, name, age)
SELECT id, name, age FROM users WHERE age >= 30;
이 구문은 특정 조건을 만족하는 데이터를 새 테이블에 그대로 복사할 때 유용하다.
🧪 실전 예제 3 – NULL 값과 DEFAULT 활용
테이블이 DEFAULT 값을 정의하고 있다면, INSERT 시 해당 컬럼을 생략할 수 있다.
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(50),
stock INT DEFAULT 100
);
INSERT INTO products (id, name) VALUES (1, '키보드');
-- stock은 자동으로 100으로 삽입됨
또는 명시적으로 NULL을 입력하면, NULL 허용 컬럼에 한해 빈 값으로 저장된다.
반응형
⚠️ INSERT 사용 시 주의사항
- 기본 키(PK) 중복 시 에러 발생
- NOT NULL 제약 조건이 있는 컬럼에 값을 넣지 않으면 오류 발생
- 외래 키 제약(FK)이 설정된 컬럼은 참조 무결성에 맞게 데이터 삽입 필요
- 트랜잭션 중에는 반드시 COMMIT 또는 ROLLBACK으로 마무리할 것
💡 INSERT 성능 향상 팁
- 대량 삽입 시 다중 행 INSERT를 사용할 것
- LOAD DATA INFILE과 같이 고속 삽입 기능도 고려 가능
- 인덱스가 너무 많은 테이블에는 INSERT 성능 저하가 발생할 수 있음
- 트랜잭션 단위로 묶어서 삽입하면 디스크 I/O 감소 효과가 있다
📌 INSERT 요약
| 항목 | 설명 |
| 명령어 | INSERT INTO |
| 사용 목적 | 테이블에 새 데이터 삽입 |
| 주요 구문 | INSERT INTO 테이블 (컬럼...) VALUES (...) |
| 고급 구문 | INSERT INTO ... SELECT ... |
| 실무 팁 | 컬럼명 명시, 다중 행 처리, 트랜잭션과 함께 사용 |
📎 공식 문서 참고
- MySQL INSERT 공식 문서:
https://dev.mysql.com/doc/refman/8.0/en/insert.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] 있으면 UPDATE, 없으면 INSERT (오라클의 MERGE INTO) (2) | 2025.06.19 |
|---|---|
| [MySQL] INSERT IGNORE 사용법 완벽 가이드(데이터 중복 방지) (0) | 2025.06.19 |
| [MySQL] INSERT INTO ... SET 사용법 완벽 가이드 (1) | 2025.06.19 |
| [MySQL] INSERT 다중 행 삽입 사용법 완벽 가이드 (1) | 2025.06.19 |
| [MySQL] SET autocommit = 0/1 완벽 가이드 사용법(오토커밋 설정) (2) | 2025.06.18 |
| [MySQL] RELEASE SAVEPOINT 완벽 가이드 사용법(SAVEPOINT 삭제) (0) | 2025.06.18 |
| [MySQL] ROLLBACK TO SAVEPOINT 완벽 가이드 사용법(SAVEPOINT 까지 롤백) (1) | 2025.06.18 |
| [MySQL] SAVEPOINT 완벽 가이드 사용법(트랜잭션 중간 지점 저장) (1) | 2025.06.17 |