๐ 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
);
- ์ฐธ์กฐํ๋ ์ปฌ๋ผ์ ์ ์ฅ๋์ด ์๋ ๊ฐ๋ง ์ปฌ๋ผ์ ์ ์ฅํ ์ ์์.
- ์ผ๋ฐ์ ์ผ๋ก PRIMARY KEY ์ ์ฝ์กฐ๊ฑด์ด ์ค์ ๋ ์ปฌ๋ผ์ ์ฐธ์กฐ.
FOREIGN 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;
๐ ์ ์ฝ์กฐ๊ฑดํ์ฑ/ ๋นํ์ฑ
- ALTER TABLE [ํ ์ด๋ธ๋ช ] ENABLE [์ ์ฝ์กฐ๊ฑด]
- ALTER TABLE [ํ ์ด๋ธ๋ช ] DISABLE [์ ์ฝ์กฐ๊ฑด]
DISABLE์ ์ฌ์ฉํ๋ฉด ์ ์ฝ์กฐ๊ฑด์ด ๋นํ์ฑํ๋๊ณ ENABLE์ ์ฌ์ฉํ๋ฉด ์ ์ฝ์กฐ๊ฑด์ด ํ์ฑํ๋๋ค.
- ์ฃผ์: ์ ์ฝ์กฐ๊ฑด์ ๋นํ์ฑ์ผ๋ก ๋ณ๊ฒฝ ํ ๋ค ๋ฐ์ดํฐ๋ฅผ ์ฝ์ /์์ ํ๊ณ ๋ค์ ์ ์ฝ์กฐ๊ฑด์ ํ์ฑํ ์ํฌ๊ฒฝ์ฐ, ๋ค์ ์ ์ ๋ฐ์ดํฐ๋ค์ ์ ์ฝ์กฐ๊ฑด์ ๋ง์ถฐ ๊ฒ์ฌํ๋ค. ์ด๋ ์ ์ฝ์กฐ๊ฑด์ ์๋ฐฐ๋๋ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ ํ์ฑํ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
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๊ฐ ํ์ฑํ๋์์ผ๋ฏ๋ก, ์ค๋ณต๋ถ๊ฐ
'์ด๋ก > DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฌด์กฐ๊ฑด ๋ฐ๋ผํ๊ธฐ] ํธ๋์ญ์ (0) | 2021.05.26 |
---|---|
[๋ฌด์กฐ๊ฑด ๋ฐ๋ผํด๋ณด๊ธฐ] TABLE (0) | 2021.05.26 |
[๋ฌด์กฐ๊ฑด ๋ฐ๋ผํ๊ธฐ] INSERT, UPDATE, DELECT (0) | 2021.05.26 |
[๋ฌด์กฐ๊ฑด ๋ฐ๋ผํด๋ณด๊ธฐ] DML ๊ทธ๋ฃนํจ์, HAVING, JOIN, SET, ์๋ธ์ฟผ๋ฆฌ (0) | 2021.05.25 |
[๋ฌด์กฐ๊ฑด ๋ฐ๋ผํด๋ณด๊ธฐ] DML ๋ ์งํจ์ , DECODE, CASE (0) | 2021.05.25 |