DBMS/OracleDB

[OracleDB] Constraints(์ œ์•ฝ์กฐ๊ฑด) ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

๐ŸŒŸ Sean ๐ŸŒŸ 2025. 1. 2. 10:59

์ œ์•ฝ์กฐ๊ฑด Constraints ์€ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

์ œ์•ฝ์กฐ๊ฑด์—๋Š” NOT NULL, UNIQUE, Primary Key(๊ธฐ๋ณธํ‚ค), Foreign Key(์™ธ๋ž˜ํ‚ค), CHECK ๋“ฑ์ด ์žˆ๋‹ค.

 

1. NOT NULL

์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… NOT NULL

 

์ปฌ๋Ÿผ์„ ์ •์˜ํ•  ๋•Œ NOT NULL ์ œ์•ฝ์กฐ๊ฑด์„ ๋ช…์‹œํ•˜๋ฉด ํ•ด๋‹น ์ปฌ๋Ÿผ์—๋Š” ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

์œ„ ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด NOT NULL ์ปฌ๋Ÿผ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์ง€ ์•Š์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

-- ํ…Œ์ด๋ธ” ์ƒ์„ฑ 
CREATE TABLE EX2_6(
    COL_NULL VARCHAR2(10),
    COL_NOT_NUlL VARCHAR2(10) NOT NULL
);

INSERT INTO ex2_6 VALUES ('AA', ''); -- ์—๋Ÿฌ ๋ฐœ์ƒ.

INSERT INTO ex2_6 VALUES ('', 'BB'); -- ์—๋Ÿฌ ๋ฐœ์ƒ๋˜์ง€ ์•Š์Œ.

 

2. UNIQUE

์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… UNIQUE

 

UNIQUE ์ œ์•ฝ์กฐ๊ฑด์€ ๋ง ๊ทธ๋Œ€๋กœ ํ•ด๋‹น ์ปฌ๋Ÿผ์— ๋“ค์–ด๊ฐ€๋Š” ๊ฐ’์ด ์œ ์ผํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ, ์ค‘๋ณต ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

* NULL์€ ๊ฐ’์ด ์—†์Œ์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ, UNIQUE ๋น„๊ต ๋Œ€์ƒ์—์„œ NULL์€ ์ œ์™ธ๋œ๋‹ค.

-- ํ…Œ์ด๋ธ” ์ƒ์„ฑ 
CREATE TABLE EX2_7(
    COL_UNIQUE_NULL VARCHAR2(10) UNIQUE,
    COL_UNIQUE_NNULL VARCHAR2(10) UNIQUE NOT NULL,
    COL_UNIQUE VARCHAR2(10),
    CONSTRAINTS unique_nm1 UNIQUE(COL_UNIQUE)
);

INSERT INTO ex2_7 VALUES ('AA', 'AA', 'AA'); 

INSERT INTO ex2_7 VALUES ('AA', 'AA', 'AA'); -- ์—๋Ÿฌ ๋ฐœ์ƒ. ์ค‘๋ณต์ด ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ

INSERT INTO ex2_7 VALUES ('','BB','BB');

INSERT INTO ex2_7 VALUES ('CC','','CC'); -- ์—๋Ÿฌ ๋ฐœ์ƒ. ๋‘๋ฒˆ์งธ ์ปฌ๋Ÿผ์—์„œ NOT NULL ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ

 

3.  PRIMARY KEY (๊ธฐ๋ณธํ‚ค)

์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… PRIMARY KEY

 

๊ธฐ๋ณธํ‚ค๋Š” UNIQUE์™€ NOT NULL ์†์„ฑ์„ ๋™์‹œ์— ๊ฐ€์ง„ ์ œ์•ฝ์กฐ๊ฑด์œผ๋กœ, ํ…Œ์ด๋ธ” ๋‹น 1๊ฐœ์˜ ๊ธฐ๋ณธํ‚ค๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๊ธฐ๋ณธํ‚ค๋Š” ๋ฐ˜๋“œ์‹œ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์›์น™์ด๋‹ค.

-- ํ…Œ์ด๋ธ” ์ƒ์„ฑ
CREATE TABLE EX2_8(
    COL1 VARCHAR2(10) PRIMARY KEY,
    COL2 VARCHAR2(10)
);

SELECT constraint_name, constraint_type, table_name, search_condition
FROM user_constraints
WHERE table_name = 'EX2_8';

INSERT INTO ex2_8 VALUES ('', 'AA'); -- ์—๋Ÿฌ ๋ฐœ์ƒ. ์ฒซ๋ฒˆ์งธ ์ปฌ๋Ÿผ์€ NULL์„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ
INSERT INTO ex2_8 VALUES ('AA', 'AA');

 

4.  CHECK

CONSTRAINT ์ฒดํฌ๋ช… CHECK(์ฒดํฌ์กฐ๊ฑด)

 

์ปฌ๋Ÿผ์— ์ž…๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒดํฌํ•ด ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ž…๋ ฅ ๋ฐ›๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฑ‰์–ด ๋‚ธ๋‹ค.

-- ํ…Œ์ด๋ธ” ์ƒ์„ฑ 
CREATE TABLE EX2_9(
    num1 NUMBER
        CONSTRAINTS check1 CHECK (num1 BETWEEN 1 AND 9),
    gender VARCHAR2(10)
        CONSTRAINTS check2 CHECK (gender IN ('MALE', 'FEMALE'))
);

INSERT INTO ex2_9 VALUES (10, 'MAN');
-- ์—๋Ÿฌ ๋ฐœ์ƒ.  
--์ฒซ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์€ 1~9๊นŒ์ง€์˜ ์ˆซ์ž๋งŒ,
--๋‘ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์€ 'MALE', 'FEMALE' ๋‘ ๊ฐ’๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ

INSERT INTO ex2_9 VALUES (5, 'MALE');
INSERT INTO ex2_9 VALUES (3, 'FEMALE');