WIPIVERSE

Insert (SQL)

SQL INSERT는 관계형 데이터베이스 관리 시스템(RDBMS)에서 테이블에 새로운 레코드(행)를 추가하기 위해 사용하는 데이터 조작 언어(DML, Data Manipulation Language)의 명령어이다. INSERT 문은 데이터베이스 내 기존 테이블에 하나 이상의 행을 삽입하는 표준 SQL 구문으로, 모든 주요 관계형 데이터베이스 시스템(MySQL, PostgreSQL, Oracle, SQL Server, SQLite 등)에서 지원된다.

구문

INSERT 문은 기본적으로 다음과 같은 두 가지 형식으로 작성된다.

형식 1 — 특정 컬럼 지정:

INSERT INTO 테이블명 (컬럼1, 컬럼2, 컬럼3, ...)
VALUES (값1, 값2, 값3, ...);

이 방식은 삽입할 컬럼을 명시적으로 지정하므로, 컬럼의 순서가 테이블 정의와 달라도 무방하며, 일부 컬럼에만 값을 넣을 수 있다. 생략된 컬럼에는 기본값(NULL 또는 DEFAULT 제약 조건에 정의된 값)이 자동으로 할당된다.

형식 2 — 모든 컬럼에 값 삽입:

INSERT INTO 테이블명
VALUES (값1, 값2, 값3, ...);

이 방식은 컬럼명을 생략하며, 값의 순서가 테이블에 정의된 컬럼 순서와 정확히 일치해야 한다. 테이블의 모든 컬럼에 대해 값을 제공해야 한다.

다중 행 삽입

하나의 INSERT 문으로 여러 행을 동시에 삽입할 수 있다.

INSERT INTO 테이블명 (컬럼1, 컬럼2)
VALUES (값A1, 값A2),
       (값B1, 값B2),
       (값C1, 값C2);

서브쿼리를 활용한 삽입

다른 테이블의 데이터를 조회하여 삽입할 수도 있다.

INSERT INTO 테이블명 (컬럼1, 컬럼2)
SELECT 컬럼A, 컬럼B
FROM 다른_테이블
WHERE 조건;

이 구문은 INSERT INTO ... SELECT라고 불리며, 기존 테이블의 데이터를 복사하거나 변환하여 새 테이블에 삽입할 때 사용된다.

주요 특징 및 제약

  • 무결성 제약 조건: INSERT 문은 테이블에 정의된 기본 키(PRIMARY KEY), 외래 키(FOREIGN KEY), UNIQUE, NOT NULL, CHECK 등의 제약 조건을 위반할 경우 실행이 실패하고 오류가 반환된다.
  • 자동 증가 컬럼: IDENTITY(일부 DBMS) 또는 AUTO_INCREMENT(MySQL) 등으로 정의된 컬럼은 시스템이 자동으로 값을 생성하므로 INSERT 시 생략할 수 있다.
  • 트랜잭션: INSERT 문은 일반적으로 트랜잭션 내에서 실행되며, COMMIT을 통해 영구 저장되거나 ROLLBACK을 통해 취소될 수 있다.
  • RETURNING 절: PostgreSQL, Oracle 등 일부 DBMS는 RETURNING 절을 지원하여 삽입된 행의 값을 반환받을 수 있다.

표준 준수

INSERT 문은 SQL 표준(ISO/IEC 9075)에 정의된 핵심 DML 명령어 중 하나이다. 다만 RETURNING, ON CONFLICT(PostgreSQL의 UPSERT), INSERT ... ON DUPLICATE KEY UPDATE(MySQL) 등은 각 DBMS의 확장 기능으로, 표준 SQL 범위를 벗어난다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기