๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์ด๋ก /DB

[๋ฌด์กฐ๊ฑด ๋”ฐ๋ผํ•ด๋ณด๊ธฐ] CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด

by 6161990 2021. 5. 26.

๐Ÿ“Œ CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด

    : ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ ํ˜น์€ ์ˆ˜์ •ํ•  ๋•Œ ์ปฌ๋Ÿผ์˜ ๊ฐ’์— ๋Œ€ํ•œ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ

  • ์„ค์ •๋œ ์กฐ๊ฑด์— ์œ„๋ฐฐ๋˜๋Š” ๊ฐ’์„ ์ปฌ๋Ÿผ์— ์ €์žฅํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•œ ๊ตฌ๋ฌธ
  • ์ฐธ๊ณ  : NOT NULL ์˜ค๋ฅ˜์‹œ์—๋Š” ์ •ํ™•ํ•œ ์˜ค๋ฅ˜ ์›์ธ์„ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ ์™ธ ์ œ์•ฝ์กฐ๊ฑด์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ถˆ๋ถ„๋ช…ํ•˜๋‹ค.์ œ์•ฝ์กฐ๊ฑด์ด ๋งŒ๋“ค์–ด์งˆ๋•Œ DB์•ˆ์—์„œ ๋žœ๋ค์œผ๋กœ ์ด๋ฆ„์ด ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—๊ฐœ๋ฐœ์ž๋Š” ์˜ค๋ฅ˜๋ฐœ์ƒ์‹œ ๊ทธ ์ด๋ฆ„์„ ๋ณด๊ณ  ์–ด๋–ค ์ œ์•ฝ์กฐ๊ฑด์—์„œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์ธ์ง€ ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ค๋‹ค.๋”ฐ๋ผ์„œ NOT NULL ์ œ์•ฝ์กฐ๊ฑด ์ด์™ธ์˜ ์ œ์•ฝ์กฐ๊ฑด์„ ๋งŒ๋“ค๋•Œ, ๋ฐ˜๋“œ์‹œ ์ด๋ฆ„์„ ๋ถ™์—ฌ์ค˜์•ผํ•œ๋‹ค.* ์ œ์•ฝ์กฐ๊ฑด์ฟผ๋ฆฌ ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… CONSTRAINT (์ œ์•ฝ์กฐ๊ฑด๋ช…) ์ œ์•ฝ์กฐ๊ฑด * ์ œ์•ฝ์กฐ๊ฑด๋ช… [ํ…Œ์ด๋ธ”๋ช…]_[์ปฌ๋Ÿผ๋ช…]_[์ œ์•ฝ์กฐ๊ฑด์•ฝ์–ด]

 

  • NOT NULL: ์ปฌ๋Ÿผ์— NULL์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ

 

--NOT NULL: ํ•ด๋‹น ์ปฌ๋Ÿผ์— NULL์„ ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค.

CREATE TABLE TEST_TABLE1(

DATA1 NUMBER,

DATA2 NUMBER NOT NULL

);

 

--ERROR, DATA2๋Š” NOT NULL ์ œ์•ฝ์กฐ๊ฑด์ด ๊ฑธ๋ ค์žˆ๊ธฐ ๋•Œ๋ฌธ์— INSERT์‹œ DATA2 ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋“œ์‹œ ๋„ฃ์–ด์•ผํ•œ๋‹ค.

INSERT INTO TEST_TABLE(DATA1) VALUES(200);

INSERT INTO TEST_TABLE(DATA2) VALUES(201); --DATA2๋งŒ ๋„ฃ์œผ๋ฉด ์˜ค๋ฅ˜ ์—†์Œ. DATA1์€ NULL์„ ํ—ˆ์šฉํ•˜๊ธฐ๋•Œ๋ฌธ

 

 

 

 

  • UNIQUE: ์ค‘๋ณต๋œ ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ, NULL์€ ๋ฌดํ•œ๋Œ€๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ

 

--UNIQUE :์ค‘๋ณต๋œ ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  NULL์€ ๋ฌดํ•œ๋Œ€๋กœ ํ—ˆ์šฉํ•œ๋‹ค.

CREATE TAVLE TEST_TABLE2(

DATA1 NUMBER,

DATA2 NUMBER CONSTRAINT TEST_TABLE2_DATA2_UK UNIQUE

);

 

  • PRIMARY KEY: ์ค‘๋ณต๋œ ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ NULL ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ. ๊ฐ ๋กœ์šฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์œ ์ผํ•œ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•จ.

 

--PRIMARY KEY : UNIQUE + NOT NULL , ์œ ์ผํ•œ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

CREATE TABLE TEST_TABLE3(

DATA1 NUMBER,

DATE2 NUMBER CONSTRAINT TEST_TABLE_DATA3_PK PRIMARY KEY

);

 

  • FOREIGN KEY: ๋‹ค๋ฅธ ํ…Œ์ด๋ธ” ํ˜น์€ ๊ฐ™์€ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์„ ์ฐธ์กฐํ•˜๋Š” ์ œ์•ฝ์กฐ๊ฑด.
    • ์ฐธ์กฐํ•˜๋Š” ์ปฌ๋Ÿผ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฐ’๋งŒ ์ปฌ๋Ÿผ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ.
    • ์ผ๋ฐ˜์ ์œผ๋กœ PRIMARY KEY ์ œ์•ฝ์กฐ๊ฑด์ด ์„ค์ •๋œ ์ปฌ๋Ÿผ์„ ์ฐธ์กฐ.

 

--FOREIGN KEY: ํŠน์ • ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์„ ์ฐธ์กฐํ•˜๋Š” ์ œ์•ฝ์กฐ๊ฑด

--์ค‘๋ณต๊ณผ NULL์„ ํ—ˆ์šฉ

CREATE TABLE TEST_TABLE4(

DATA1 NUMBER CONSTRAINT TEST_TABLE4_PK PRIMARY KEY,

DATA2 NUMBER NOT NULL

);

 

CREATE TABLE TEST_TABLE5(

DATA3 NUMBER NOT NULL,

DATA4 NUMBER CONSTRAINT TEST_TABLE5_FK REFERENCES TEST_TABLE4(DATA1)

);

 

 

 

 

  • CHECK : ์กฐ๊ฑด์— ๋งŒ์กฑํ•  ๊ฒฝ์šฐ ์ปฌ๋Ÿผ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ.

 

--CHECK ์ œ์•ฝ์กฐ๊ฑด : ์ปฌ๋Ÿผ์— ์ €์žฅ๋  ๊ฐ’์„ ์ง€์ •ํ•œ๋‹ค.

--์ค‘๋ณต, NULLํ—ˆ์šฉ

CREATE TABLE TEST_TABLE6(

DATA1 NUMBER CONSTRAINT TEST_TABLE6_DATA1_CK CHECK (DATA1 BETWEEN 1 AND 10),

DATA2 NUMBER CONSTRAINT TEST_TABLE6_DATA2_CK CHECK (DATA2 IN (10,20,30))

);


๐Ÿ“ ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ ์ œ์•ฝ์กฐ๊ฑด

  • ์ œ์•ฝ ์กฐ๊ฑด์„ ์„ค์ •ํ•  ๋•Œ ๊ฐ ์ปฌ๋Ÿผ๋งˆ๋‹ค ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ํ•˜๋‹จ ๋ถ€๋ถ„์— ๋ชฐ์•„์„œ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ์ปฌ๋Ÿผ๋ช… ์˜†์— ๊ธฐ์ˆ ํ•˜๋Š” ๊ฒƒ์„ ์ปฌ๋Ÿผ ๋ ˆ๋ฒจ, ํ•˜๋‹จ์— ๋ชฐ์•„์„œ ๊ธฐ์ˆ ํ•˜๋Š” ๊ฒƒ์„ ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ ์ œ์•ฝ ์กฐ๊ฑด์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

--์ปฌ๋Ÿผ ๋ ˆ๋ฒจ ์ œ์•ฝ์กฐ๊ฑด

CREATE TABLE TEST_TABLE10(

DATA1 NUMBER CONSTRAINT TEST_TABLE10_DATA1_PK PRIMARY KEY,

DATA2 NUMBER NOT NULL CONSTRAINT TEST_TABLE10_DATA2_UK UNIQUE,

DATA3 NUMBER NOT NULL CONSTRAINT TEST_TABLE10_DATA3_FK

                                   REFERENCES EMP(EMPNO),

DATA4 NUMBER NOT NULL CONSTRAINT TEST_TABLE10_DATA4_CK CHECK (DATA4 BETWEEN 1 AND 10),

DATA5 NUMBER NOT NULL CONSTRAINT TEST_TABLE10_DATA5_CK CHECK (DATA5 IN (10,20,30))

);

 

 

 

--ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ ์ œ์•ฝ์กฐ๊ฑด

CREATE TABLE TEST_TABLE10(

DATA1 NUMBER ,

DATA2 NUMBER NOT NULL,

DATA3 NUMBER NOT NULL,

DATA4 NUMBER NOT NULL,

DATA5 NUMBER NOT NULL,

 

CONSTRAINT TEST_TABLE10_DATA1_PK PRIMARY KEY(DATA1),

CONSTRAINT TEST_TABLE10_DATA2_UK UNIQUE (DATA2),

CONSTRAINT TEST_TABLE10_DATA3_FK FOREIGN KEY (DATA3) REFERENCES EMP(EMPNO),

CONSTRAINT TEST_TABLE10_DATA4_CK CHECK (DATA4 BETWEEN 1 AND 10),

CONSTRAINT TEST_TABLE10_DATA5_CK CHECK (DATA5 IN (10,20,30))

);

 


๐Ÿ“ ๋ณตํ•ฉํ‚ค

  • ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ ์ œ์•ฝ์กฐ๊ฑด์„ ์„ค์ •ํ•  ๋•Œ ํ•˜๋‚˜์ด์ƒ์˜ ์ปฌ๋Ÿผ์„ ํ•˜๋‚˜์˜ PRIMARY KEY๋กœ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณตํ•ฉํ‚ค์˜ ๊ฒฝ์šฐ ๊ฐ ์ปฌ๋Ÿผ์— ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ—ˆ์šฉ์ด ๋˜์ง€๋งŒ, ํ•œ ๋กœ์šฐ์˜ ๋ชจ๋“  ๋ณตํ•ฉํ‚ค ์ปฌ๋Ÿผ์ด ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

--DATA1๊ณผ DATA1์˜ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์‹œ ๊ฐ™์€ ๊ฐ’ ๊ฐ™์ด ๋„ฃ์„ ์ˆ˜ ์—†์Œ.

-- EX) ...(100,100) -> X -- EX) ...(100,200) AND ๋˜๋‹ค์‹œ (100,200) -> O

CREATE TABLE TEST_TABLE11(

DATA1 NUMBER ,

DATA2 NUMBER ,

CONSTRAINT TEST_TABLE11_COMBO_PK PRIMARY KEY(DATA1, DATA2)

);

 

 


๐Ÿ“ ์ œ์•ฝ์กฐ๊ฑด์ถ”๊ฐ€, ์ œ๊ฑฐ

  • ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•œ ํ›„ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ALTER ๊ตฌ๋ฌธ์„ ์ด์šฉ.
  • ์ถ”๊ฐ€ : ALTER TABLE [ํ…Œ์ด๋ธ”๋ช…] ADD [์ œ์•ฝ์กฐ๊ฑด]
  • ์ œ๊ฑฐ : ALTER TABLE [ํ…Œ์ด๋ธ”๋ช…] DROP [์ œ์•ฝ์กฐ๊ฑด]

 

--์ œ์•ฝ์กฐ๊ฑด ์—†์ด ํ…Œ์ด๋ธ”์ƒ์„ฑ

CREATE TABLE TEST_TABLE20(

DATA1 NUMBER ,

DATA2 NUMBER ,

DATA3 NUMBER ,

DATA4 NUMBER ,

DATA5 NUMBER

);

 

--NOT NULL ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€

ALTER TABLE TEST_TABLE20

MODIFY DATA1 NOT NULL;

 

INSERT INTO TEST_TABLE20 (DATA1) VALUES (NULL); --ERROR

 

--NOT NULL์ œ์•ฝ์กฐ๊ฑด ์ œ๊ฑฐ(NULL ํ—ˆ์šฉํ•˜๋Š” ์ปฌ๋Ÿผ์œผ๋กœ ์ˆ˜์ •)

ALTER TABLE TEST_TABLE20 MODIFY DATA1 NULL;

 

--PRIMARY KEY ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ ALTER TABLE TEST_TABLE20 ADD CONSTRAINT TEST_TABLE20_DATA2_PK PRIMARY KEY(DATA2); --PRIMARY KEY ์ œ์•ฝ์กฐ๊ฑด ์ œ๊ฑฐ ALTER TABLE TEST_TABLE20 DROP CONSTRAINT TEST_TABLE20_DATA2_PK;

 

--FOREIGN KEY ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ ALTER TABLE TEST_TABLE20 ADD CONSTRAINT TEST_TABLE20_DATA3_FK FOREIGN KEY(DATA3) REFERENCES EMP(EMPNO); --FOREIGN KEY ์ œ์•ฝ์กฐ๊ฑด ์ œ๊ฑฐ ALTER TABLE TEST_TABLE20 DROP CONSTRAINT TEST_TABLE20_DATA3_FK;

 

--UNIQUE ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ ALTER TABLE TEST_TABLE20 ADD CONSTRAINT TEST_TABLE20_DATA4_UK UNIQUE(DATA4); --UNIQUE ์ œ์•ฝ์กฐ๊ฑด ์ œ๊ฑฐ ALTER TABLE TEST_TABLE20 DROP CONSTRAINT TEST_TABLE20_DATA4_UK;

 

--CHECK ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€ ALTER TABLE TEST_TABLE20 ADD CONSTRAINT TEST_TABLE20_DATA5_CK CHECK(DATA5 BETWEEN 1 AND 10); --CHECK ์ œ์•ฝ์กฐ๊ฑด ์ œ๊ฑฐ ALTER TABLE TEST_TABLE20 DROP CONSTRAINT TEST_TABLE20_DATA5_CK;


๐Ÿ“ ์ œ์•ฝ์กฐ๊ฑดํ™œ์„ฑ/ ๋น„ํ™œ์„ฑ

  • DISABLE์„ ์‚ฌ์šฉํ•˜๋ฉด ์ œ์•ฝ์กฐ๊ฑด์ด ๋น„ํ™œ์„ฑํ™”๋˜๊ณ  ENABLE์„ ์‚ฌ์šฉํ•˜๋ฉด ์ œ์•ฝ์กฐ๊ฑด์ด ํ™œ์„ฑํ™”๋œ๋‹ค.
    • ALTER TABLE [ํ…Œ์ด๋ธ”๋ช…] ENABLE [์ œ์•ฝ์กฐ๊ฑด]
    • ALTER TABLE [ํ…Œ์ด๋ธ”๋ช…] DISABLE [์ œ์•ฝ์กฐ๊ฑด]
  • ์ฃผ์˜: ์ œ์•ฝ์กฐ๊ฑด์˜ ๋น„ํ™œ์„ฑ์œผ๋กœ ๋ณ€๊ฒฝ ํ•œ ๋’ค ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…/์ˆ˜์ •ํ•˜๊ณ  ๋‹ค์‹œ ์ œ์•ฝ์กฐ๊ฑด์„ ํ™œ์„ฑํ™” ์‹œํ‚ฌ๊ฒฝ์šฐ, ๋‹ค์‹œ ์ „์— ๋ฐ์ดํ„ฐ๋“ค์„ ์ œ์•ฝ์กฐ๊ฑด์— ๋งž์ถฐ ๊ฒ€์‚ฌํ•œ๋‹ค. ์ด๋•Œ ์ œ์•ฝ์กฐ๊ฑด์— ์œ„๋ฐฐ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ํ™œ์„ฑํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

CREATE TABLE TEST_TABLE40( DATA1 NUMBER CONSTRAINT TEST_TABLE40_DATA1_PK PRIMARY KEY, ); INSERT INTO TEST_TABLE40 (DATA1) VALUES (100); INSERT INTO TEST_TABLE40 (DATA1) VALUES (100); --ERROR : PRIMARY KEY, ์ค‘๋ณต๋ถˆ๊ฐ€๋Šฅ --์ œ์•ฝ์กฐ๊ฑด ๋น„ํ™œ์„ฑ ALTER TABLE TEST_TABLE40 DISABLE CONSTRAINT TEST_TABLE40_DATA1_PK; INSERT INTO TEST_TABLE40 (DATA1) VALUES (100); --์ค‘๋ณต๊ฐ€๋Šฅํ•ด์ง --์ œ์•ฝ์กฐ๊ฑด ๋‹ค์‹œ ํ™œ์„ฑํ™” ALTER TABLE TEST_TABLE40 ENABLE CONSTRAINT TEST_TABLE40_DATA1_PK; --๋‹ค์‹œ ํ™œ์„ฑํ™” ๋ถˆ๊ฐ€๋Šฅ. --ํ…Œ์ด๋ธ” ๋‚ด์˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ ํ›„ ๋‹ค์‹œ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… DELETE FROM TEST_TABLE40; INSERT INTO TEST_TABLE40 (DATA1) VALUES (100); INSERT INTO TEST_TABLE40 (DATA1) VALUES (200); ALTER TABLE TEST_TABLE40 ENABLE CONSTRAINT TEST_TABLE40_DATA1_PK; INSERT INTO TEST_TABLE40 (DATA1) VALUES (200); --ERROR : PRIMAEY KEY๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ์œผ๋ฏ€๋กœ, ์ค‘๋ณต๋ถˆ๊ฐ€