# KEY

기본 테이블은 `CREATE TABLE`로 만들어지는 테이블로 독자적으로 존재하는 테이블이다.

> 독자적으로 존재? 테이블과 행(튜플)들이 DBMS에 의해 하나의 파일로 생성되고 저장된다는 의미

```sql
CREATE TABLE 테이블 이름 (
        컬럼명1 DATATYPE [DEFAULT 형식],
        컬럼명2 DATATYPE [DEFAULT 형식],
        컬럼명3 DATATYPE [DEFAULT 형식]
);
```

## 제약조건(Constraint)

테이블 작성시에 Constraint를 사용해 입력하는 데이터에 대해 제약을 정해줄 수 있다. 제약조건은 사용자가 원하는 조건의 데이터만 유지하기 위한 특정 컬럼에 설정하는 제약이다. 테이블 생성시 제약조건을 반드시 기술할 필요는 없다.

| 구분          | 설명                                                                                                                                                                                                                                      |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| PRIMARY KEY | <p>- 테이블에 지정된 행 데이터를 고유하기 식별하기 위한 <strong>기본키</strong><br>- 하나의 테이블에 하나의 기본키 제약만 정의할 수 있다.<br>- 기본키 제약을 정의하면 DBMS는 자동으로 UNIQUE 인덱스를 생성하며, 기본키를 구성하는 컬럼에는 NULL값을 입력할 수 없다.<br>- <strong>PRIMARY KYE = UNIQUE KEY & NOT NULL</strong></p> |
| UNIQUE KEY  | <p>- 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 고유키 정의<br>- 중복성 배제, <strong>유일한 값</strong>으로 존재해야한다.<br>- NULL은 고유키 제약의 대상이 아니므로, NULL값을 가진 행이 여러 개 있더라도 제약 위반이 되지 않는다.</p>                                                                           |
| NOT NULL    | NULL값의 입력을 금지한다. 이 제약을 지정함으로써 해당 컬럼은 **입력 필수**가 된다.                                                                                                                                                                                     |
| CHECK       | 입력할 수 있는 값의 범위 등을 제한한다. CHECK 제약으로는 TRUE or FALSE로 평가할 수 있는 논리식을 지정한다.                                                                                                                                                                  |
| FOREIGN KEY | <p>- 관계형 데이터베이스에서 테이블 간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우 생성된다.<br>- 외래키 지정시 참조 무결성 제약 옵션을 선택할 수 있다.</p>                                                                                                                           |

### PRIMARY KEY

```sql
CREATE TABLE 테이블 이름 (
        컬럼명1 DATATYPE PRIMARY KEY
        컬럼명2 DATATYPE [DEFAULT 형식],
        컬럼명3 DATATYPE [DEFAULT 형식]
);
```

```sql
CREATE TABLE 테이블 이름 (
        컬럼명1 DATATYPE [DEFAULT 형식],
        컬럼명2 DATATYPE [DEFAULT 형식],
        컬럼명3 DATATYPE [DEFAULT 형식],
  			CONSTRAINTS 기본키_이름 PRIMARY KEY(컬럼1, 컬럼2)
);
```

**PRIMARY KEY**는 하나의 테이블에 있는 데이터들을 식별하기 위한 기준으로 인식되는 제약조건이다. UNIQUE와 달리 한개의 테이블에 하나만 생성이 가능하다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dahye-jeong.gitbook.io/spring/master-5/database/2019-03-18-key.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
