1. NOT NULL
- 컬럼이
NULL 값을 허용하지 않도록 지정
- 기본적으로 테이블의 모든 컬럼은
NULL 값을 허용함
- 단,
NOT NULL 제약 조건을 명시적으로 사용하는 경우에는 제외
2. UNIQUE
- 컬럼의 모든 값이 서로 구별되거나 고유한 값이 되도록 함
3. PRIMARY KEY
- 테이블에서 행의 고유성을 식별하는 데 사용되는 컬럼
- 각 테이블에는 하나의 기본 키만 있음
- 암시적으로
NOT NULL 제약 조건이 포함되어 있음
- (주의) INTEGER 타입에만 사용 가능
4. AUTOINCREMENT
- 사용되지 않은 값이나 이전에 삭제된 행의 값을 재사용하는 것을 방지
INTEGER PRIMARY KEY 뒤에 작성하면 rowid를 재사용하지 못하도록 함
- Django에서 테이블 생성 시 id 컬럼에 기본적으로 사용하는 제약 조건
CREATE TABLE table_name (
id INTEGER PRIMARY KEY AUTOINCREMENT,
)
5. 기타 Constraints
(참고) rowid의 특징
- 테이블을 생성할 때마다
rowid라는 암시적 자동 증가 컬럼이 생성됨
- 테이블의 행을 고유하게 식별하는 64비트 부호 있는 정수 값
- 테이블에 새 행을 삽입할 때마다 정수 값을 자동으로 할당
- 값은 1에서 시작
- 데이터 삽입 시에 rowid 또는
INTEGER PRIMARY KEY 컬럼에 명시적으로 값이 지정되지 않은 경우, SQLite는 테이블에서 가장 큰 rowid보다 하나 큰 다음 순차 정수를 자동으로 할당 (AUTOINCREMENT와 관계없이)
- 만약
INTEGER PRIMARY KEY 키워드를 가진 컬럼을 직접 만들면 이 컬럼은 rowid 컬럼의 별칭(alias)이 됨
- 즉, 새 컬럼 이름으로 rowid에 액세스 할 수 있으며 rowid 이름으로도 여전히 액세스 가능
- 데이터가 최대 값에 도달하고 새 행을 삽입하려고 하면 SQLite는 사용되지 않는 정수를 찾아 사용
- 만약 SQLite가 사용되지 않은 정수를 찾을 수 없으면
SQLITE_FULL 에러 발생
- 또한 일부 행을 삭제하고 새 행을 삽입하면 SQLite는 삭제된 행에서 rowid 값을 재사용하려고 시도