INSERT는 SQL에서 데이터베이스의 테이블에 새로운 데이터를 추가할 때 사용하는 구문입니다. SELECT가 데이터를 조회하는 명령이라면 INSERT는 테이블에 새로운 행을 저장하는 역할을 합니다. 회원 가입 정보나 상품 정보, 주문 내역처럼 새로운 데이터가 발생했을 때 해당 내용을 데이터베이스에 저장하기 위해 사용합니다.

INSERT의 기본 문법

INSERT는 INSERT INTO 뒤에 데이터를 추가할 테이블을 지정하고, VALUES 뒤에 실제로 저장할 값을 작성하는 방식으로 사용합니다.

기본적인 형태는 다음과 같습니다.

INSERT INTO member (name, age, city)
VALUES ('김철수', 30, '서울');

위 쿼리는 member 테이블에 새로운 회원 정보를 추가합니다. name에는 김철수, age에는 30, city에는 서울이라는 값이 저장됩니다.

여기서 컬럼명을 직접 지정하는 것이 중요합니다. 어떤 값을 어떤 컬럼에 저장할 것인지 명확하게 표현할 수 있기 때문입니다.

예를 들어 다음과 같이 작성할 수도 있습니다.

INSERT INTO member
VALUES (1, '김철수', 30, '서울');

테이블의 모든 컬럼 순서에 맞춰 값을 입력하는 방식입니다. 하지만 테이블의 컬럼 순서가 변경되거나 컬럼이 추가되면 쿼리가 예상과 다르게 동작할 수 있습니다. 따라서 실제 개발에서는 필요한 컬럼을 명시적으로 지정하는 방식이 보다 안전합니다.

INSERT를 실행하면 기존 데이터가 수정되는 것이 아니라 새로운 행이 추가됩니다. 따라서 같은 테이블에 여러 회원이 존재하는 경우 각각의 회원 정보가 새로운 행으로 저장됩니다.

여러 개의 데이터 추가하기

INSERT는 하나의 행만 추가할 수 있는 것이 아니라 여러 개의 데이터를 한 번에 추가할 수도 있습니다.

INSERT INTO member (name, age, city)
VALUES
('김철수', 30, '서울'),
('이영희', 25, '부산'),
('박민수', 35, '대구');

위 쿼리는 세 개의 회원 데이터를 한 번의 INSERT 문으로 추가합니다.

여러 데이터를 한 번에 추가하면 각각의 데이터를 별도의 INSERT 문으로 반복해서 실행하는 것보다 SQL 문을 간결하게 작성할 수 있습니다. 또한 여러 데이터를 한꺼번에 처리해야 하는 상황에서 활용할 수 있습니다.

INSERT를 사용할 때는 입력하려는 값의 데이터 타입과 컬럼의 제약 조건도 확인해야 합니다. 숫자 컬럼에는 일반적으로 숫자를 입력하고 문자열에는 작은따옴표를 사용합니다.

INSERT INTO member (name, age)
VALUES ('김철수', 30);

문자열인 김철수는 작은따옴표로 감싸고 숫자인 30은 따옴표 없이 작성합니다.

날짜와 시간 데이터를 저장하는 경우에도 컬럼의 데이터 타입에 맞는 값을 입력해야 합니다.

INSERT INTO member (name, created_at)
VALUES ('김철수', '2026-09-20');

실제 데이터베이스에서는 날짜와 시간의 저장 형식이 DBMS와 컬럼의 데이터 타입에 따라 달라질 수 있으므로 테이블 구조를 확인한 뒤 데이터를 입력해야 합니다.

기본 키와 제약 조건

INSERT를 사용할 때는 테이블에 설정된 제약 조건도 함께 고려해야 합니다. 특히 기본 키가 설정된 테이블에서는 이미 존재하는 기본 키 값을 다시 입력할 수 없습니다.

예를 들어 id가 기본 키이고 자동으로 번호가 증가하도록 설정되어 있다면 다음과 같이 회원 정보를 추가할 수 있습니다.

INSERT INTO member (name, age, city)
VALUES ('김철수', 30, '서울');

이 경우 데이터베이스가 새로운 회원의 ID를 자동으로 생성하도록 설정되어 있다면 INSERT 문에서 id를 직접 입력하지 않아도 됩니다.

반대로 기본 키 값을 직접 입력해야 하는 구조라면 다음과 같이 작성할 수 있습니다.

INSERT INTO member (id, name, age)
VALUES (101, '김철수', 30);

이때 이미 id가 101인 데이터가 존재한다면 기본 키 중복으로 인해 INSERT가 정상적으로 실행되지 않을 수 있습니다.

UNIQUE 제약 조건도 INSERT에 영향을 줍니다. 예를 들어 이메일 컬럼에 UNIQUE가 설정되어 있다면 동일한 이메일을 가진 데이터를 여러 개 저장할 수 없습니다.

INSERT INTO member (email, name)
VALUES ('test@example.com', '김철수');

이미 동일한 이메일이 존재한다면 데이터베이스는 제약 조건 위반으로 INSERT를 처리하지 않습니다.

외래 키가 설정된 컬럼도 주의해야 합니다. 다른 테이블의 데이터를 참조하는 외래 키에 존재하지 않는 값을 입력하면 데이터 무결성 문제를 방지하기 위해 INSERT가 거부될 수 있습니다.

따라서 INSERT는 단순히 값을 입력하는 기능처럼 보이지만 실제로는 기본 키, 외래 키, UNIQUE, NOT NULL 등의 테이블 제약 조건을 만족해야 정상적으로 데이터가 저장됩니다.

INSERT는 회원 가입, 상품 등록, 주문 생성 등 새로운 데이터가 발생하는 대부분의 서비스에서 사용됩니다. 애플리케이션에서 사용자가 새로운 정보를 입력하면 서버가 해당 정보를 전달받고 INSERT SQL을 실행하여 데이터베이스에 새로운 행을 저장하는 방식으로 동작할 수 있습니다.

결국 INSERT는 테이블에 새로운 데이터를 추가하기 위한 SQL 구문입니다. INSERT INTO 뒤에 대상 테이블과 컬럼을 지정하고 VALUES 뒤에 저장할 값을 입력합니다. 하나의 행뿐만 아니라 여러 행을 한 번에 추가할 수도 있으며, 기본 키나 UNIQUE와 같은 제약 조건을 만족해야 정상적으로 데이터가 저장됩니다. 다음 단계에서는 이미 저장된 데이터를 변경하는 UPDATE에 대해 알아보겠습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

글쓴이

rjsan46@koreabites.com

관련 게시물

복합 인덱스란 무엇인가

복합 인덱스는 데이터베이스에서 두 개 이상의 컬럼을 하나의 인덱스로 묶어 사용하는 방식입니다. 하나의 컬럼만 검색하는 단일 인덱스와 달리 여러 컬럼을 함께 조건으로...

모두 읽어보기

인덱스가 빠른 이유

인덱스가 빠른 이유는 데이터베이스가 검색할 때 테이블의 모든 데이터를 처음부터 끝까지 확인하지 않고, 별도로 구성된 검색 구조를 이용하여 필요한 데이터의 위치를 빠르게...

모두 읽어보기

인덱스란 무엇인가

인덱스는 데이터베이스에서 원하는 데이터를 빠르게 찾기 위해 사용하는 자료 구조입니다. 데이터가 많아질수록 모든 데이터를 하나씩 확인하는 방식은 검색 시간이 증가하기 때문에 인덱스를...

모두 읽어보기

서브쿼리란 무엇인가

서브쿼리는 SQL 문 안에 다른 SQL 문을 포함하여 사용하는 쿼리입니다. 하나의 SQL 문에서 필요한 데이터를 먼저 조회한 다음 그 결과를 바깥쪽 쿼리에서...

모두 읽어보기

INNER JOIN과 OUTER JOIN 차이

INNER JOIN과 OUTER JOIN은 서로 다른 테이블의 데이터를 연결할 때 어떤 데이터를 조회 결과에 포함할 것인지 결정하는 JOIN 방식입니다. INNER JOIN은 두...

모두 읽어보기

JOIN이란 무엇인가

JOIN은 SQL에서 서로 다른 테이블에 저장된 데이터를 연결하여 하나의 조회 결과로 가져올 때 사용하는 구문입니다. 관계형 데이터베이스에서는 하나의 테이블에 모든 데이터를 저장하기보다...

모두 읽어보기