๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฆ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค (DB) ๐Ÿ“ฆ/๐Ÿ…พ ์˜ค๋ผํด DB & SQL

TABLE -2 (๋ฌด๊ฒฐ์„ฑ CONSTRAINT, primary key, unique key, foreign key ...etc)

by Meteora_ 2021. 2. 17.
728x90

Primary Key : ๊ธฐ๋ณธํ‚ค. NULL์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.    id, ์ฃผ๋ฏผ๋ฒˆํ˜ธ 


Unique Key  : ๊ณ ์œ ํ‚ค. NULL์€ ํ—ˆ์šฉํ•œ๋‹ค. ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.          E-mail  


Foreign Key : ์™ธ๋ž˜ํ‚ค. ํ…Œ์ด๋ธ”๊ณผ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ชฉ์ ์˜ ์„ฑ์งˆ์ด๋‹ค. Join์ด ๋ชฉ์ .

NULL์€ ํ—ˆ์šฉ ์™ธ๋ž˜ํ‚ค๋กœ ์„ค์ •๋œ ์ปฌ๋Ÿผ์€ ์—ฐ๊ฒฐ๋œ ํ…Œ์ด๋ธ”์—์„œ PK๋‚˜ UK๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.      

 

CHECK: ๋ฒ”์œ„๋ฅผ ์„ค์ •. ์ง€์ •๋œ ๊ฐ’์™ธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. NULL์€ ํ—ˆ์šฉ

 

NOT NULL    : NULL์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
-- NOT NULL
CREATE TABLE TB_TEST01(
    COL1 VARCHAR2(10NOT NULL,
    COL2 VARCHAR2(20)
);
 
INSERT INTO tb_test01(COL1, COL2)
VALUES('AAA''111');
 
INSERT INTO tb_test01(COL1, COL2)
VALUES('BBB''');  -- "" != NULL
 
SELECT * FROM tb_test01;
 
INSERT INTO tb_test01(COL1, COL2)
VALUES('''222');
 
INSERT INTO tb_test01(COL1)
VALUES('CCC');
 
-- Primary Key = Unique + NOT NULL
DROP TABLE tb_test01
CASCADE CONSTRAINTS;
 
CREATE TABLE TB_TEST01(
    PKCOL VARCHAR2(10CONSTRAINT PK_TEST_01 PRIMARY KEY,
    COL1 VARCHAR2(20),
    COL2 VARCHAR2(20)
);
 
INSERT INTO tb_test01(PKCOL, COL1, COL2)
VALUES('AAA''aaa''111');
 
INSERT INTO tb_test01(PKCOL, COL1, COL2)
VALUES('BBB''''');
 
INSERT INTO tb_test01(PKCOL, COL1, COL2)
VALUES('''bbb''222');
 
SELECT * FROM tb_test01;
 
DROP TABLE tb_test01
CASCADE CONSTRAINTS;
 
CREATE TABLE TB_TEST01(
    PKCOL VARCHAR2(10CONSTRAINT PK_TEST_01 PRIMARY KEY,
    COL1 VARCHAR2(20CONSTRAINT PK_TEST_02 PRIMARY KEY,    -- table can have only one primary key
    COL2 VARCHAR2(20)
);
 
CREATE TABLE TB_TEST01(
    PKCOL VARCHAR2(10),
    COL1 VARCHAR2(20),
    COL2 VARCHAR2(20),
    CONSTRAINT PK_TEST_01 PRIMARY KEY(PKCOL, COL1)
);
 
DROP TABLE tb_test01
CASCADE CONSTRAINTS;
 
CREATE TABLE TB_TEST01(
    PKCOL VARCHAR2(10),
    COL1 VARCHAR2(20),
    COL2 VARCHAR2(20)
);
 
-- ALTER -> Primary Key ์ถ”๊ฐ€
 
-- Unique : ๊ณ ์œ ํ‚ค. ์ค‘๋ณต๋œ ๊ฐ’์€ ์ž…๋ ฅ๋ถˆ๊ฐ€. NULLํ—ˆ์šฉ
CREATE TABLE TB_TEST01(
    UKCOL VARCHAR2(10CONSTRAINT UK_TEST_01 UNIQUE,
    COL1 VARCHAR2(20),
    COL2 VARCHAR2(30)
);
 
INSERT INTO tb_test01(UKCOL, COL1, COL2)
VALUES('AAA''aaa''111');
 
INSERT INTO tb_test01(UKCOL, COL1, COL2)
VALUES('''bbb''222');
 
-- unique key๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•  ๊ฒฝ์šฐ
ALTER TABLE tb_test01
DROP CONSTRAINT UK_TEST_01;
 
-- FOREIGN KEY : ์™ธ๋ž˜ํ‚ค
--               ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”(departments)์—์„œ๋Š” PK, UK๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค
--               NULL์„ ํ—ˆ์šฉ
 
-- PARANT TABLE 
CREATE TABLE TB_DEPT(
    DEPARTMENT_ID VARCHAR2(10),
    DEPARTMENT_NAME VARCHAR2(20),
    LOCATION_ID NUMBER,
    CONSTRAINT PK_DEPT_TEST PRIMARY KEY(DEPARTMENT_ID)
);
 
INSERT INTO TB_DEPT(DEPARTMENT_ID, DEPARTMENT_NAME, LOCATION_ID)
VALUES('10''๊ธฐํš๋ถ€'120);
 
INSERT INTO TB_DEPT(DEPARTMENT_ID, DEPARTMENT_NAME, LOCATION_ID)
VALUES('20''๊ด€๋ฆฌ๋ถ€'150);
 
INSERT INTO TB_DEPT(DEPARTMENT_ID, DEPARTMENT_NAME, LOCATION_ID)
VALUES('30''๊ฐœ๋ฐœ๋ถ€'180);
 
-- CHILD TABLE
CREATE TABLE TB_EMP(
    EMPNO VARCHAR2(10),
    ENAME VARCHAR2(20),
    DEPARTMENT_ID VARCHAR2(10),
    CONSTRAINT FK_EMP_TEST FOREIGN KEY(DEPARTMENT_ID) 
    REFERENCES TB_DEPT(DEPARTMENT_ID)
);
 
INSERT INTO TB_EMP(EMPNO, ENAME, DEPARTMENT_ID)
VALUES(100'ํ™๊ธธ๋™'10);
 
INSERT INTO TB_EMP(EMPNO, ENAME, DEPARTMENT_ID)
VALUES(110'์„ฑ์ถ˜ํ–ฅ'20);
 
INSERT INTO TB_EMP(EMPNO, ENAME, DEPARTMENT_ID)
VALUES(120'์ผ์ง€๋งค'30);
 
INSERT INTO TB_EMP(EMPNO, ENAME, DEPARTMENT_ID)
VALUES(130'์ •์ˆ˜๋™''');
 
SELECT e.empno, e.ename, d.department_id, d.department_name
FROM tb_emp e, tb_dept d
WHERE e.department_id = d.department_id;
 
-- CHECK : ์ง€์ •๋œ ๊ฐ’๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. NULL์€ ํ—ˆ์šฉ, ์ค‘๋ณตํ—ˆ์šฉ
CREATE TABLE TB_CHECK(
    COL1 VARCHAR2(10),
    COL2 VARCHAR2(20),
    CONSTRAINT CHK_01 CHECK( COL1 IN('์‚ฌ๊ณผ''๋ฐฐ''๋ฐ”๋‚˜๋‚˜') ),
    CONSTRAINT CHK_02 CHECK( COL2 > 0 AND COL2 <= 100 )
);
 
INSERT INTO TB_CHECK(COL1, COL2)
VALUES('์‚ฌ๊ณผ'50);
 
INSERT INTO TB_CHECK(COL1, COL2)
VALUES('๊ทค'50);
 
INSERT INTO TB_CHECK(COL1, COL2)
VALUES(''50);
 
INSERT INTO TB_CHECK(COL1, COL2)
VALUES('๋ฐ”๋‚˜๋‚˜'0);
cs

๋Œ“๊ธ€