Insert (SQL)

개념
INSERT는 관계형 데이터베이스 관리 시스템(RDBMS)에서 사용되는 SQL(Structured Query Language) 명령 중 하나로, 테이블에 새로운 행(row)을 추가하는 데 사용된다. 표준 SQL에서는 INSERT 구문을 통해 하나 이상의 레코드를 지정된 컬럼에 삽입할 수 있다.

표준 정의
국제표준인 ISO/IEC 9075 (SQL 표준)에서는 INSERT 구문을 다음과 같이 정의한다.

INSERT INTO <테이블명> [(<컬럼명1>, <컬럼명2>, ...)]
VALUES (<값1>, <값2>, ...);

또는 다중 행 삽입을 위해:

INSERT INTO <테이블명> [(<컬럼명1>, <컬럼명2>, ...)]
VALUES (<값1>, <값2>, ...),
       (<값3>, <값4>, ...),
       ...;

표준에 따라 INSERT 구문은 INSERT INTOINSERT 두 형태를 모두 허용한다.

주요 옵션 및 변형

구문 설명
INSERT INTO … VALUES … 지정된 컬럼 순서대로 단일 행을 삽입한다.
INSERT INTO … SELECT … 다른 테이블이나 서브쿼리의 결과를 기반으로 다수의 행을 삽입한다.
INSERT … ON CONFLICT … (PostgreSQL) 충돌(중복 키 등)이 발생했을 때 대체 동작을 지정한다.
INSERT … ON DUPLICATE KEY UPDATE … (MySQL) 중복 키가 발생하면 기존 행을 업데이트한다.
INSERT … RETURNING … (PostgreSQL, Oracle 등) 삽입된 행의 특정 컬럼 값을 반환한다.
INSERT … WITH … (공통 테이블 식) 복잡한 데이터 변환 과정을 포함한 삽입을 지원한다.

역사
INSERT 구문은 초기 관계형 데이터베이스 모델이 제안된 1970년대 초반부터 존재했으며, 1974년 IBM이 발표한 System R 프로젝트에서 최초로 구현된 것으로 알려져 있다. 이후 1986년 ANSI가 SQL-86 표준에 포함하면서 표준화되었고, 이후 SQL-92, SQL:1999, SQL:2003 등 다양한 개정판에서 문법이 확장·보완되었다.

구현 예시

  1. 단일 행 삽입

    INSERT INTO Employees (EmployeeID, Name, HireDate)
    VALUES (101, 'Kim Ji‑hoon', CURRENT_DATE);
    
  2. 다중 행 삽입

    INSERT INTO Products (ProductID, ProductName, Price)
    VALUES (2001, 'Notebook', 1200000),
           (2002, 'Pen', 1500),
           (2003, 'Mouse', 25000);
    
  3. SELECT 결과를 이용한 삽입

    INSERT INTO ArchiveOrders (OrderID, CustomerID, OrderDate)
    SELECT OrderID, CustomerID, OrderDate
    FROM Orders
    WHERE OrderDate < '2020-01-01';
    

관련 명령

  • UPDATE : 기존 행의 값을 변경한다.
  • DELETE : 행을 삭제한다.
  • MERGE : INSERT, UPDATE, DELETE를 조건에 따라 조합한다.

보안 및 성능 고려사항

  • 트랜잭션: INSERT는 일반적으로 트랜잭션 내에서 수행되며, 커밋 전까지 다른 세션에 보이지 않는다.
  • 제약조건: 기본키, 고유키, 외래키, NOT NULL 등 테이블에 정의된 제약조건을 위반하면 삽입이 실패한다.
  • 배치 삽입: 대량 데이터를 삽입할 경우 BULK INSERT(SQL Server), COPY(PostgreSQL) 등 전용 명령을 사용하는 것이 성능상 유리하다.
  • 인덱스: 삽입 시 인덱스가 유지 보수되므로, 대량 삽입 시 일시적으로 인덱스를 비활성화하거나 비동기 방식으로 처리하는 전략이 사용될 수 있다.

표준화 기관

  • ISO/IEC JTC 1/SC 32 (데이터베이스 언어와 인터페이스)
  • ANSI (American National Standards Institute)

참고 문헌

  • ISO/IEC 9075 (SQL 표준 시리즈)
  • 《SQL:1999 – Database Language SQL》, ISO/IEC JTC1/SC32
  • C.J. Date, An Introduction to Database Systems, 8th ed., Addison‑Wesley, 2003.

위 내용은 공개된 표준 문서와 주요 DBMS(Oracle, MySQL, PostgreSQL, Microsoft SQL Server 등)의 공식 문서를 기반으로 작성되었습니다.

둘러보기

더 찾아볼 만한 주제