본문 바로가기

Study/데이터 베이스

[DBMS 강의 - 13] 데이터 삽입 (INSERT)

 

 

INSERT

- 테이블에 한 행을 삽입하는 명령문이다.

- 사용 구문은 다음과 같다.

INSERT [ INTO ] table_name ( column_list ) VALUES ( value list ) [ , ..n ]

- INTO : SQL 종류에 따라 생략을 할 수도 있으나 가급적 호환성을 위하여 써버릇 하는 것이 좋다.

- column list : 쉼표로 구분된 하나 이상의 열 목록을 가리킨다.

- value list : 각각의 값은 같은 위치의 열에 할당되며, 쉼표로 구분된 하나 이상의 값 목록을 가리킨다.

쉼표로 구분되어 반복될 수 있다. (즉, 하나의 INSERT 문으로 여러 행을 삽입할 수 있다)

 

- INSERT 문의 작동 원리를 그림으로 나타내면 다음과 같다.

 

 

INSERT 문을 사용한 SQL 쿼리에는 다음과 같은 것들이 있다.

 

 

기본적인 형태로 Table1 이라는 테이블에 (id, name) 열에 각각 7과 DBMS라는 값을 삽입하는 쿼리이다.

 

 

 

INSERT문을 사용할 때 굳이 테이블에 있는 열 순서 그대로 나열하지 않아도 된다.

즉, (id, name) 대신에 (name, id)로 지정해도 values 값만 잘 설정하면 결과는 성공적으로 데이터가 삽입된다

 

 

 

VALUES 값을 넣을 때 (,)로 구분하여 여러 행들을 삽입할 수도 있다.

 

 

 

 

실제 해당 테이블(ProductCategory)에는 여러 개의 열(ProductCategoryId, ParentProductCategoryID, Name, rowguid, MidifiedDate)이 있는데

쿼리에서는 하나의 열(Name)만 지정하여 값을 집어넣는 쿼리이다. 우선 아래 결과를 보자.

ProductCategoryID 열은 IDENTITY가 설정되어 있어서 자동으로 일련번호가 증가하면서 삽입되었고,

ParentProductCategoryID 열은 NULL이,

rowguid와 ModifiedDate 열에는 기본값(DEFAULT)이 자동으로 들어 갔다.

주의할점은, 아무 열이나 생략할 수 없다는 점이다.

NULL이 허용되지 않고, 기본값(DEFAULT)이 설정되어 있지 않고, IDENTITY 속성도 설정 되어 있지 않은 열을 생략하면 오류가 발생한다.

 

 

 

Name 열을 식료품으로 지정하고 이외의 열들은 모든 DEFAULT(테이블 생성시 설정된 기본값)를 지정하였다.

DEFAULT로 지정하면 해당 열에는 기본값 또는 NULL이 삽입된다.

VALUES 값으로 DEFAULT를 사용한 열 중에서 ParentProductCategoryID를 제외하고는 기본값들이 적용된것을 볼 수 있다.

ParentProductCategoryID 열은 기본값이 설정되어 있지 않고, NULL이 허용되기 때문에 NULL이 삽입되었다.

 

 

 

 

우선 새로운 테이블을 생성하는데 약간의 첨언을 해보면 다음과 같다.

id (열 이름)            int (데이터 타입)               IDENTITY (자동으로 1씩 증가)

name (열 이름)       varchar (데이터 타입)        NULL (NULL 허용)

location (열 이름)   varchar (데이터 타입)        NULL (NULL 허용)        CONSTRAINT Default_LOCATION (기본 location 제약 조건 설정)   

 DEFAULT '서울시'  (기본값을 서울시로 설정)

reg_date (열 이름)   datetime(데이터 타입)      NOT NULL(NULL 허용 불가)    CONSTRAINT Default_CurrDate (기본 CurrDate 제약 조건 설정)

 DEFAULT GETDATE ()      * GETDATE 함수는 현재 시간을 돌려주는 함수이다. 즉, 기본값으로 현재 시간을 설정한다는 뜻이다.

 

 

이제 name 열을 심심이, location을 NULL로 설정하여 삽입하면, 비록 location의 기본값이 서울시로 되어 있다 하더라도 NULL을 삽입한다고 쿼리에서 명시하였기

때문에 해당 열에는 NULL이 들어가게 된다.

 

 

 

name 열에는 둘리, location 열에는 DEFAULT(기본값=서울시)를 설정하여 데이터를 집어넣는 쿼리이다.

 

 

 

모든 열에 기본값을 집어넣는 쿼리이다. (사용 빈도가 매우 적은 형태이다)

모든 열에 대한 기본값이기 때문에

name은 IDENTITY 속성에 의해 1씩 증가하여 3이 들어가고

name은 DEFAULT가 정의되지 않고 NULL이 허용되기 때문에 NULL이 들어가고

location은 DEFAULT가 정의되어 있기 때문에 서울시가 들어가고

reg_date 또한 DEFAULT가 정의되어 있기 때문에 현재 시간이 들어간다.