Constraints

μ»¬λŸΌμ— Constraints (μ œμ•½μ‘°κ±΄) μ£ΌκΈ°

μ»¬λŸΌλ§Œλ“€ λ•Œ μ œμ•½μ‘°κ±΄μ„ κ±Έμ–΄λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€.

- 이 μ»¬λŸΌμ€ NOT NULL ν•΄μ•Όν•œλ‹€ (ν……λΉˆ 데이터 μ§‘μ–΄λ„£μ§€ 말아라)

- 이 μ»¬λŸΌμ— μžˆλŠ” 데이터듀은 항상 UNIQUE ν•΄μ•Όν•œλ‹€

- 여기에 음수말고 μ–‘μˆ˜λ§Œ λ“€μ–΄μ˜€λŠ”μ§€ CHECK ν•˜λΌ

- 이 μ»¬λŸΌμ„ PRIMARY KEY둜 μ„€μ •ν•˜λΌ

λ“± μ—¬λŸ¬κ°€μ§€ 섀정이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

1. NOT NULL μ œμ•½μ‘°κ±΄

CREATE TABLE new_table3 (
    id NUMBER(38,0) NOT NULL,
    이름 VARCHAR(100) NOT NULL,
    λ‚˜μ΄ NUMBER(38,0)
) 

컬럼 λ§Œλ“€ λ•Œ μš°μΈ‘μ— NOT NULL을 체크해주면 NULL κΈˆμ§€λΌλŠ” μ œμ•½μ„ κ±Έ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ›λž˜ 데이터넣을 λ•Œ 까먹고 μ•ˆλ„£μœΌλ©΄ μžλ™μœΌλ‘œ NULL이 λ©λ‹ˆλ‹€.

κ·Έλž˜μ„œ NOT NULL μž…λ ₯해두면 λ‚˜μ€‘μ— μ΄λ¦„μ»¬λŸΌμ΄λ‚˜ idμ»¬λŸΌμ— 까먹고 데이터λ₯Ό μ•ˆλ„£μœΌλ©΄ μ €μž₯이 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

2. UNIQUE μ œμ•½μ‘°κ±΄

컬럼 λ§Œλ“€ λ•Œ μš°μΈ‘μ— UNIQUE λ₯Ό 체크해주면 UNIQUE λΌλŠ” μ œμ•½μ„ κ±Έ 수 μžˆμŠ΅λ‹ˆλ‹€.

UNIQUEκ°€ λΆ™μ–΄μžˆλŠ” μ»¬λŸΌμ•ˆμ—μ„  λͺ¨λ“  행이 각각 λ‹€λ₯Έ 데이터λ₯Ό κ°€μ§€κ³  μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

κ·Έλž˜μ„œ λ‹€λ₯Έ 행에 μžˆλŠ” 값을 μ €μž₯ν•˜λ €κ³  ν•˜λ©΄ μ €μž₯이 μ•ˆλ©λ‹ˆλ‹€.

μ§„μ§œμΈμ§€ ν…ŒμŠ€νŠΈν•΄λ΄…μ‹œλ‹€.

ν˜Ήμ€ μ΅œν•˜λ‹¨μ— UNIQUE(컬럼1, 컬럼2 ...) μ΄λ ‡κ²Œ 넣어도 λ©λ‹ˆλ‹€.

근데 μ΄λ ‡κ²Œ 2개 μ΄μƒμ˜ μ»¬λŸΌμ„ λ„£κ²Œλ  경우 컬럼1κ³Ό 컬럼2 값이 μ „λΆ€ κ°™μ•„μ•Ό μ €μž₯을 λ§‰μ•„μ€λ‹ˆλ‹€.

id
이름
λ‚˜μ΄

1

aaa

20

2

aaa

21

이건 μ €μž₯을 ν—ˆμš©ν•΄μ£ΌλŠ”λ°

d
이름
λ‚˜μ΄

1

aaa

20

2

aaa

20

이건 μ €μž₯이 μ•ˆλ©λ‹ˆλ‹€.

3. CHECK() μ œμ•½μ‘°κ±΄

μ»¬λŸΌλ§Œλ“€ λ•Œ μš°μΈ‘μ— CHECK () λ„£μœΌλ©΄ μ»¬λŸΌμ— λ“€μ–΄κ°ˆ 값에 μ œμ•½μ„ λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ“±ν˜Έ λΆ€λ“±ν˜Έ AND OR μ¨μ„œ μ‘°κ±΄μ‹μ²˜λŸΌ μž…λ ₯ν•˜λ©΄ λ©λ‹ˆλ‹€. IN μ—°μ‚°μžλ„ κ°€λŠ₯ν•©λ‹ˆλ‹€.

κ·Έλ ˆμ„œ μœ„μ²˜λŸΌ ν•΄λ†“μœΌλ©΄ 이제 'λ‚˜μ΄' μ»¬λŸΌμ— 음수 λͺ»λ„£μŒ

4. PRIMARY KEY μ œμ•½μ‘°κ±΄

row ν•˜λ‚˜ μ €μž₯ν•  λ•Œ λ§ˆλ‹€ id같은걸 기둝해둬야 λ‚˜μ€‘μ— νŽΈλ¦¬ν•©λ‹ˆλ‹€.

학생이름

ν•™λ…„

반

κΉ€μ² μˆ˜

1

2

κΉ€μ˜ν¬

1

2

μ΄μ‹œμš°

2

3

예λ₯Ό λ“€μ–΄ DB에 학생 μΆœμ„λΆ€λ₯Ό μ €μž₯ν•˜λ €λ©΄ ν•™μƒμ˜ 이름 ν•™λ…„ 반만 μ €μž₯ν•œλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€.

2ν•™λ…„ 3λ°˜μ— μ΄μ‹œμš° 학생이 또 μž…ν•™ν•˜λ©΄ μ–΄λ–»κ²Œ λ‘˜μ„ κ΅¬λΆ„ν• κΉŒμš”???

κ·Έλž˜μ„œ ν•™μƒλ§ˆλ‹€ μœ λ‹ˆν¬ν•œ 번호λ₯Ό 달아놔야 μ’‹μ§€ μ•Šμ„κΉŒμš”.

ν•™λ²ˆ

학생이름

ν•™λ…„

반

1

κΉ€μ² μˆ˜

1

2

2

κΉ€μ˜ν¬

1

2

3

μ΄μ‹œμš°

2

3

4

μ΄μ‹œμš°

2

3

각 ν•™μƒλ§ˆλ‹€ μœ λ‹ˆν¬ν•œ ν•™λ²ˆμ„ λΆ€μ—¬ν•˜λ©΄ λ‚˜μ€‘μ— λ™μΌν•œ μ΄λ¦„μ˜ 데이터가 듀어와도 각각 ꡬ뢄짓기가 κ°€λŠ₯ν•©λ‹ˆλ‹€.

μ—¬κΈ°μ„œ 'ν•™λ²ˆ' μ»¬λŸΌμ„ primary key 라고 λΆ€λ¦…λ‹ˆλ‹€.

primary keyλŠ” 각 행을 ꡬ뢄짓기 μœ„ν•΄ 각각 μœ λ‹ˆν¬ν•œ 데이터λ₯Ό λ‹΄κ³ μžˆλŠ” μ»¬λŸΌμž…λ‹ˆλ‹€.

- 문자 넣어도 λ˜λŠ”λ° 보톡은 1μ”© μ¦κ°€ν•˜λŠ” 숫자λ₯Ό 주둜 λ„£μŠ΅λ‹ˆλ‹€.

- μžμ‹ μžˆμœΌλ©΄ 없어도 μƒκ΄€μ—†λŠ”λ° 보톡은 ν…Œμ΄λΈ”λ§ˆλ‹€ λ§Œλ“€μ–΄λ†“λŠ”κ²Œ μ’‹μŠ΅λ‹ˆλ‹€.

- μ—¬λŸ¬ μ»¬λŸΌμ„ λ¬Άμ–΄μ„œ primary key둜 지정이 κ°€λŠ₯ν•©λ‹ˆλ‹€. μ—¬λŸ¬ 컬럼 묢은 κ²°κ³Όκ°€ 각 ν–‰λ§ˆλ‹€ μœ λ‹ˆν¬ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

μ»¬λŸΌλ§Œλ“€ λ•Œ μš°μΈ‘μ— PRIMARY KEY 라고 ν‘œκΈ°ν•˜λ©΄ κ·Έ μ»¬λŸΌμ€ PRIMARY KEY 둜 λ“±λ‘ν•΄λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€.

그럼 NOT NULL, UNIQUE μ œμ•½μ‘°κ±΄λ„ μžλ™μœΌλ‘œ λΆ€μ—¬λ©λ‹ˆλ‹€.

5. μ»¬λŸΌκ°’ μžλ™ 증가

넣어두면 ν…Œμ΄λΈ”μ— 행이 좔가될 λ•Œ μžλ™μœΌλ‘œ μ•Œμ•„μ„œ 1μ”© μ¦κ°€λœ 값이 λΆ€μ—¬λ©λ‹ˆλ‹€.

(μ˜ˆμ‹œ) ν…Œμ΄λΈ”μ˜ λ§ˆμ§€λ§‰ 행에 idκ°€ 100으둜 κΈ°λ‘λ˜μ–΄μžˆμ—ˆλ‹€λ©΄

μƒˆλ‘œ 행을 μΆ”κ°€ν•˜λ©΄ μ•Œμ•„μ„œ idλ₯Ό 101둜 μ„€μ •ν•΄μ€λ‹ˆλ‹€.

- PRIMARY KEY 쑰건 넣을 λ•Œ 자주 ν•¨κ»˜ μ‚¬μš©λ©λ‹ˆλ‹€.

6. CONSTRAINTS() λ¬Έλ²•μœΌλ‘œ μ œμ•½μ‘°κ±΄μ£ΌκΈ°

μ œμ•½μ‘°κ±΄ 쀄 λ•Œ 밑에 μ΄λ ‡κ²Œ 써도 λ©λ‹ˆλ‹€.

μ œμ•½μ‘°κ±΄λ§ˆλ‹€ μž‘λͺ…을 ν•΄μ„œ κ·€μ—½κ²Œ 이름뢙여주고 μ‹ΆμœΌλ©΄ CONSTRAINT 문법을 μ”λ‹ˆλ‹€.

μ΄λ ‡κ²Œ 해두면 λ‚˜μ€‘μ— μ—λŸ¬κ°€ λ‚  λ•Œ "μ œμ•½μ‘°κ±΄λͺ…2 λ•Œλ¬Έμ— μ—λŸ¬κ°€ λ‚©λ‹ˆλ‹€" 이런 μ‹μœΌλ‘œ ν‘œκΈ°κ°€ λ˜λ―€λ‘œ

SQL μ½”λ“œκ°€ λ™μž‘ν•˜μ§€ μ•Šμ„ λ•Œ λ²„κ·Έμ°ΎλŠ” 과정이 μ’€ 더 νŽΈλ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

7. μ œμ•½μ‘°κ±΄ μΆ”κ°€

8. μ œμ•½μ‘°κ±΄ μ‚­μ œ

μƒμ„±ν•œ μ œμ•½μ‘°κ±΄μ€ Constraints νƒ­μ—μ„œ 확인할 수 μžˆλ‹€.

Last updated