# 행 추가하기 - INSERT
**`INSERT 명령`**
```
INSERT INTO 테이블명 VALUES(값 1, 값 2, ...)
```
- `SELECT` 명령은 데이터 검색을 위한 것으로, 질의를 하면 데이터베이스 서버가 클라이언트로 결과를 반환하는 형식으로 처리된다.
- 데이터를 추가할 경우에는 이와 반대로 클라이언트에서 서버로 데이터를 전송하는 형식을 취한며 서버 측은 전송받은 데이터를 데이터베이스에 저장한다.

---

## 1. INSERT로 행 추가하기
- `RDBMS`에서는 `INSERT` 명령을 사용해 테이블의 행 단위로 데이터를 추가한다.
- `INSERT` 명령을 통해 행을 추가하려면 각 열의 값을 지정해야 한다.
- 먼저 `INSERT INTO` 뒤에 행을 추가할 테이블을 지정한다.

```
INSERT INTO sample41
```

- 저장할 데이터를 지정하지 않았기 때문에 아직은 `INSERT` 명령문이 완성되지 않은 상태이다.
- 행의 데이터는 `VALUES` 구를 사용해 지정한다.

```
INSERT INTO sample41 VALUES(1, 'ABC', '2014-01-25');
```

- 값을 지정할 때는 해당 열의 데이터 형식에 맞도록 지정해야 한다.
- 다만, `INSERT` 명령을 실행해도 처리상태만 표시될 뿐 `SELECT` 명령을 실행했을 때처럼 결과를 출력하지는 않는다.
- `SELECT` 명령의 경우 실행하면 그 결과가 클라이언트에게 반환되지만, `INSERT` 명령은 데이터가 클라이언트에서 서버로 전송되므로 반환되는 결과가 없는 것이다.

##### INSERT 명령으로 테이블에 행을 추가할 수 있다!

---

## 2. 값을 저장할 열 지정하기
- `INSERT` 명령으로 행을 추가할 경우 값을 저장할 열을 지정할 수 있다.
- 열을 지정할 경우에는 테이블명 뒤에 괄호로 묶어 열명을 나열하고 `VALUES` 구로 값을 지정한다.
- `VALUES` 구에 값을 지정할 경우에는 지정한 열과 동일한 개수로 값을 지정해야 한다.

**`INSERT의 열 지정`**
```
INSERT INTO 테이블명 (열1, 열2, ...) VALUES(값1, 값2, ...)
```

- 위의 문법을 적용하면 지정한 열에 값을 넣어 행을 추가할 수 있다.

---

## 3. NOT NULL 제약
- 행을 추가할 때 유효한 값이 없는 상태(`NULL`)로 두고 싶을 경우에는 `VALUES` 구에서 `NULL`로 값을 지정할 수 있다.
- 하지만 `NULL` 값을 허용하지 않는 `NOT NULL 제약`이 걸려있으면 에러가 발생한다.
- 이와 같이 테이블에 저장하는 데이터를 성정으로 제한하는 것을 통틀어 `제약`이라 부른다.
- `NOT NULL 제약`은 그중 하나로 이 외에도 다양한 제약이 있다.

##### NOT NULL 제약이 걸려있는 열은 NULL 값을 허용하지 않는다!

- `NULL`은 여러 측면에서 주의해야 한다.
- `NULL`의 조건을 비교할 때는 `IS NULL`을 이용해야 하며 `NULL`을 포함한 연산 결과는 모두 `NULL`이 되어버리기도 한다.
- `NULL`을 허용하고 싶지 않다면 `NOT NULL` 제약을 걸어두는 편이 좋다.

---

## 4. DEFAULT
- `DESC` 명령으로 열 구성을 살펴보면 `Default`라는 항목을 찾을 수 있다.
- `Default`는 명시적으로 값을 지정하지 않았을 경우 사용하는 초깃값을 말한다.
- `Default` 값은 테이블을 정의할 때 지정할 수 있다. 열을 지정해 행을 추가할 때 지정하지 않은 열은 `Default` 값을 사용하여 저장된다.
- 즉, 값을 생략하면 초깃값으로 지정된 `Default` 값으로 저장된다.

**`값을 생략하지 않고 행 추가하기`**
```
INSERT INTO sample411(no, d) VALUES(1, 1);
```

- `VALUES` 구에서 `DEFAULT` 키워드를 사용하면 디폴트값이 저장된다.
- 아래 예시처럼 디폴트값을 지정하는 것을 `DEFAULT`를 명시적으로 지정하는 방법이라고 한다.

**`DEFAULT로 값을 지정해 행 추가하기`**
```
INSERT INTO sample411(no, d) VALUES(2, DEFAULT);
```

### 암묵적으로 디폴트 저장
- 암묵적으로 지정하는 방법도 있다.
- 여기서 암묵적인 방법이란 디폴트값으로 저장할 열을 `INSERT` 명령문에서 별도 지정하지 않는 것을 말한다.
- 그 결과, 명시적 방법과 암묵적 방법 중 어떤 것을 사용해도 지정하지 않은 열의 값이 디폴트로 저장됨을 확인할 수 있다.

**`암묵적으로 디폴트값을 가지는 행 추가하기`**
```
INSERT INTO sample411(no) VALUES(3);
```

##### 열을 지정하지 않으면 디폴트값으로 행이 추가된다!

---