Skip to content

Commit 75663bd

Browse files
committed
feat : 250910-sqlite-constraints
1 parent 18a7342 commit 75663bd

File tree

2 files changed

+104
-0
lines changed

2 files changed

+104
-0
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
---
2+
title: "[TIL] SQLite Constraints (제약조건)"
3+
description: "[TIL]SQLite Constraints"
4+
thumbnail: "./thumbnail.png"
5+
date: "2025-09-10T17:00:00"
6+
category: "TIL"
7+
tags: ["SQL", "SQLite"]
8+
---
9+
10+
SQLite에서 테이블을 대충 만들면 안좋은 사태가 발생합니다;
11+
12+
만약 테이블을 다음과 같이 만든다고 해볼게요.
13+
14+
```sql
15+
CREATE TABLE movies (
16+
title TEXT,
17+
released INTEGER,
18+
overview TEXT,
19+
rating REAL,
20+
director TEXT
21+
) strict;
22+
```
23+
24+
오.. 뭐 그래도 타입도 들어가있고 썩 나쁘지 않아보입니다.
25+
26+
근데 문제가 있어요.
27+
28+
`rating` 요런데에 음수를 집어넣을 수 있다거나, DB에 중복된 이름으로 데이터가 여러개 있을 수 있다던가.. 그런 부분들이요.
29+
30+
이번 포스팅에서는 그런걸 막기위해 하는 제약조건에 대해 적어볼거에염.
31+
32+
# 제약조건 (Constraints)
33+
34+
일단 제약조건 거는 코드부터 떤질게염.
35+
36+
```sql
37+
CREATE TABLE movies (
38+
title TEXT UNIQUE NOT NULL,
39+
released INTEGER NOT NULL,
40+
overview TEXT NOT NULL,
41+
rating REAL NOT NULL,
42+
director TEXT
43+
for_adults INTEGER NOT NULL DEFAULT 0
44+
) strict;
45+
```
46+
47+
이런식으로 테이블 만들 때 걸어줄 수 있습니다.
48+
49+
보시면 데이터 타입 정의하는 부분 뒤에 막 붙죠? 이게 바로 제약조건이에염.
50+
51+
이름에서 유추 할 수 있듯이 `UNIQUE` 는 중복된 값을 허용하지 않는다는 뜻이고, `NOT NULL` 은 해당 컬럼에 NULL을 허용하지 않는다는 뜻이에염.
52+
53+
`DEFAULT` 는 해당 컬럼에 기본값을 설정한다는 뜻이에염.
54+
55+
이런식으로 제약조건을 걸어줄 수 있어염.
56+
57+
데이터를 넣을때 이제 저 조건에 맞춰서 안넣으면 에러가 나게 될것이에요.
58+
59+
# 제약조건 종류 (Constraints Types)
60+
61+
SQLite에서 제약조건은 다음과 같은 종류가 있구염.
62+
63+
| 제약조건 | 설명 |
64+
| ----------- | ----------------------------------- |
65+
| UNIQUE | 중복된 값을 허용하지 않는다. |
66+
| NOT NULL | 해당 컬럼에 NULL을 허용하지 않는다. |
67+
| DEFAULT | 해당 컬럼에 기본값을 설정한다. |
68+
| CHECK | 해당 컬럼에 조건을 추가한다. |
69+
| PRIMARY KEY | 해당 컬럼을 기본키로 설정한다. |
70+
71+
CHECK 써서 좀 더 복잡한 제약조건을 만들 수 있어염.
72+
73+
이렇게!
74+
75+
```sql
76+
CREATE TABLE movies (
77+
title TEXT UNIQUE NOT NULL,
78+
released INTEGER NOT NULL,
79+
overview TEXT NOT NULL,
80+
rating REAL NOT NULL,
81+
director TEXT
82+
for_adults INTEGER NOT NULL DEFAULT 0 CHECK (for_adults = 0 OR for_adults = 1)
83+
) strict;
84+
```
85+
86+
이렇게 하면 `for_adults` 컬럼에는 0 또는 1만 들어갈 수 있어염.
87+
88+
```sql
89+
(for_adults > -1 OR for_adults < 2)
90+
```
91+
92+
이런것도 되고
93+
94+
```sql
95+
(for_adults BETWEEN 0 AND 1)
96+
```
97+
98+
이런것도 됩니다.
99+
100+
<hr/>
101+
102+
간단하게 제약조건에 대해서 알아봤습니다~
103+
104+
그럼 이만~
5.56 KB
Loading

0 commit comments

Comments
 (0)