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 ์ œ์•ฝ์กฐ๊ฑด

CREATE TABLE new_table3 (
    id NUMBER(38,0) UNIQUE,
    ์ด๋ฆ„ VARCHAR(100),
    ๋‚˜์ด NUMBER(38,0)
) 

์ปฌ๋Ÿผ ๋งŒ๋“ค ๋•Œ ์šฐ์ธก์— UNIQUE ๋ฅผ ์ฒดํฌํ•ด์ฃผ๋ฉด UNIQUE ๋ผ๋Š” ์ œ์•ฝ์„ ๊ฑธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

UNIQUE๊ฐ€ ๋ถ™์–ด์žˆ๋Š” ์ปฌ๋Ÿผ์•ˆ์—์„  ๋ชจ๋“  ํ–‰์ด ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ํ–‰์— ์žˆ๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ €์žฅ์ด ์•ˆ๋ฉ๋‹ˆ๋‹ค.

์ง„์งœ์ธ์ง€ ํ…Œ์ŠคํŠธํ•ด๋ด…์‹œ๋‹ค.

CREATE TABLE new_table3 (
    id NUMBER(38,0),
    ์ด๋ฆ„ VARCHAR(100),
    ๋‚˜์ด NUMBER(38,0),
    UNIQUE(์ด๋ฆ„,๋‚˜์ด)
)

ํ˜น์€ ์ตœํ•˜๋‹จ์— UNIQUE(์ปฌ๋Ÿผ1, ์ปฌ๋Ÿผ2 ...) ์ด๋ ‡๊ฒŒ ๋„ฃ์–ด๋„ ๋ฉ๋‹ˆ๋‹ค.

๊ทผ๋ฐ ์ด๋ ‡๊ฒŒ 2๊ฐœ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์„ ๋„ฃ๊ฒŒ๋  ๊ฒฝ์šฐ ์ปฌ๋Ÿผ1๊ณผ ์ปฌ๋Ÿผ2 ๊ฐ’์ด ์ „๋ถ€ ๊ฐ™์•„์•ผ ์ €์žฅ์„ ๋ง‰์•„์ค๋‹ˆ๋‹ค.

id
์ด๋ฆ„
๋‚˜์ด

1

aaa

20

2

aaa

21

์ด๊ฑด ์ €์žฅ์„ ํ—ˆ์šฉํ•ด์ฃผ๋Š”๋ฐ

d
์ด๋ฆ„
๋‚˜์ด

1

aaa

20

2

aaa

20

์ด๊ฑด ์ €์žฅ์ด ์•ˆ๋ฉ๋‹ˆ๋‹ค.

3. CHECK() ์ œ์•ฝ์กฐ๊ฑด

CREATE TABLE new_table3 (
    id NUMBER(38,0),
    ์ด๋ฆ„ VARCHAR(100),
    ๋‚˜์ด NUMBER(38,0) CHECK (๋‚˜์ด >0)
) 

์ปฌ๋Ÿผ๋งŒ๋“ค ๋•Œ ์šฐ์ธก์— 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๋กœ ์ง€์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ ๋ฌถ์€ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ ํ–‰๋งˆ๋‹ค ์œ ๋‹ˆํฌํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

CREATE TABLE new_table3 (
    id NUMBER(38,0) PRIMARY KEY,
    ์ด๋ฆ„ VARCHAR(100),
    ๋‚˜์ด NUMBER(38,0) CHECK (๋‚˜์ด >0)  
) 

์ปฌ๋Ÿผ๋งŒ๋“ค ๋•Œ ์šฐ์ธก์— PRIMARY KEY ๋ผ๊ณ  ํ‘œ๊ธฐํ•˜๋ฉด ๊ทธ ์ปฌ๋Ÿผ์€ PRIMARY KEY ๋กœ ๋“ฑ๋กํ•ด๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ NOT NULL, UNIQUE ์ œ์•ฝ์กฐ๊ฑด๋„ ์ž๋™์œผ๋กœ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

5. ์ปฌ๋Ÿผ๊ฐ’ ์ž๋™ ์ฆ๊ฐ€

CREATE TABLE new_table3 (
    id NUMBER(38,0) GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    ์ด๋ฆ„ VARCHAR(100),
    ๋‚˜์ด NUMBER(38,0) CHECK (๋‚˜์ด >0)
)

๋„ฃ์–ด๋‘๋ฉด ํ…Œ์ด๋ธ”์— ํ–‰์ด ์ถ”๊ฐ€๋  ๋•Œ ์ž๋™์œผ๋กœ ์•Œ์•„์„œ 1์”ฉ ์ฆ๊ฐ€๋œ ๊ฐ’์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

(์˜ˆ์‹œ) ํ…Œ์ด๋ธ”์˜ ๋งˆ์ง€๋ง‰ ํ–‰์— id๊ฐ€ 100์œผ๋กœ ๊ธฐ๋ก๋˜์–ด์žˆ์—ˆ๋‹ค๋ฉด

์ƒˆ๋กœ ํ–‰์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์•Œ์•„์„œ id๋ฅผ 101๋กœ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.

- PRIMARY KEY ์กฐ๊ฑด ๋„ฃ์„ ๋•Œ ์ž์ฃผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

6. CONSTRAINTS() ๋ฌธ๋ฒ•์œผ๋กœ ์ œ์•ฝ์กฐ๊ฑด์ฃผ๊ธฐ

CREATE TABLE new_table3 (
    id NUMBER(38,0) ,
    ์ด๋ฆ„ VARCHAR(100),
    ๋‚˜์ด NUMBER(38,0) ,
    PRIMARY KEY (id),
    CHECK (๋‚˜์ด >0)
);

CREATE TABLE new_table3 (
    id NUMBER(38,0) ,
    ์ด๋ฆ„ VARCHAR(100),
    ๋‚˜์ด NUMBER(38,0) ,
    CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช…1 PRIMARY KEY (id),
    CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช…2 CHECK (๋‚˜์ด >0)
);

์ œ์•ฝ์กฐ๊ฑด ์ค„ ๋•Œ ๋ฐ‘์— ์ด๋ ‡๊ฒŒ ์จ๋„ ๋ฉ๋‹ˆ๋‹ค.

์ œ์•ฝ์กฐ๊ฑด๋งˆ๋‹ค ์ž‘๋ช…์„ ํ•ด์„œ ๊ท€์—ฝ๊ฒŒ ์ด๋ฆ„๋ถ™์—ฌ์ฃผ๊ณ  ์‹ถ์œผ๋ฉด CONSTRAINT ๋ฌธ๋ฒ•์„ ์”๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด๋‘๋ฉด ๋‚˜์ค‘์— ์—๋Ÿฌ๊ฐ€ ๋‚  ๋•Œ "์ œ์•ฝ์กฐ๊ฑด๋ช…2 ๋•Œ๋ฌธ์— ์—๋Ÿฌ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค" ์ด๋Ÿฐ ์‹์œผ๋กœ ํ‘œ๊ธฐ๊ฐ€ ๋˜๋ฏ€๋กœ

SQL ์ฝ”๋“œ๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ๋•Œ ๋ฒ„๊ทธ์ฐพ๋Š” ๊ณผ์ •์ด ์ข€ ๋” ํŽธ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

7. ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€

ALTER TABLE new_table3 MODIFY ๋‚˜์ด NUMBER(38,0) NOT NULL; 

8. ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ

ALTER TABLE ํ…Œ์ด๋ธ”๋ช… DROP CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด์ด๋ฆ„;

์ƒ์„ฑํ•œ ์ œ์•ฝ์กฐ๊ฑด์€ Constraints ํƒญ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Last updated