개념
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 INTO와 INSERT 두 형태를 모두 허용한다.
주요 옵션 및 변형
| 구문 | 설명 |
|---|---|
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 등 다양한 개정판에서 문법이 확장·보완되었다.
구현 예시
-
단일 행 삽입
INSERT INTO Employees (EmployeeID, Name, HireDate) VALUES (101, 'Kim Ji‑hoon', CURRENT_DATE); -
다중 행 삽입
INSERT INTO Products (ProductID, ProductName, Price) VALUES (2001, 'Notebook', 1200000), (2002, 'Pen', 1500), (2003, 'Mouse', 25000); -
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 등)의 공식 문서를 기반으로 작성되었습니다.