Á¦¾àÁ¶°Ç (Constraint)
Á¦¾àÁ¶°ÇÀ̶õ Å×ÀÌºí¿¡ ºÎÀûÀýÇÑ ÀÚ·á°¡ ÀԷµǴ °ÍÀ» ¹æÁöÇϱâ À§Çؼ ¿©·¯ °¡Áö ±ÔÄ¢À» Àû¿ëÇØ ³õ´Â°Å¶ó »ý°¢ÇÏ¸é µË´Ï´Ù. °£´ÜÇÏ°Ô Å×À̺í¾È¿¡¼ Å×ÀÌÅÍÀÇ ¼º°ÝÀ» Á¤ÀÇÇÏ´Â °ÍÀÌ ¹Ù·Î Á¦¾àÁ¶°Ç ÀÔ´Ï´Ù.
¡Ú µ¥ÀÌÅÍÀÇ ¹«°á¼º À¯Áö¸¦ À§ÇÏ¿© »ç¿ëÀÚ°¡ ÁöÁ¤ÇÒ ¼ö ÀÖ´Â ¼ºÁú ÀÔ´Ï´Ù.
¡Ú ¸ðµç CONSTRAINT´Â µ¥ÀÌÅÍ »çÀü(DICTIONARY)¿¡ ÀúÀå µË´Ï´Ù.
¡Ú ÀǹÌÀÖ´Â À̸§À» ºÎ¿©Çß´Ù¸é CONSTRAINT¸¦ ½±°Ô ÂüÁ¶ÇÒ ¼ö ÀÖ½À´Ï´Ù.
¡Ú Ç¥ÁØ °´Ã¼ ¸í¸í¹ýÀ» µû¸£´Â °ÍÀÌ ÁÁ½À´Ï´Ù.
¡Ú Á¦¾àÁ¶°ÇÀº Å×À̺íÀ» »ý¼ºÇÒ ´ç½Ã¿¡ ÁöÁ¤ÇÒ ¼öµµ ÀÖ°í, Å×ÀÌºí »ý¼º ÈÄ ±¸Á¶º¯°æ(ALTER)¸í·É¾î¸¦
ÅëÇØ¼µµ Ãß°¡°¡ °¡´ÉÇÕ´Ï´Ù.
¡Ú NOT NULLÁ¦¾àÁ¶°ÇÀº ¹Ýµå½Ã Ä÷³ ·¹º§¿¡¼¸¸ Á¤Àǰ¡ °¡´ÉÇÕ´Ï´Ù.
NOT NULL Á¶°Ç(nn) : Ä÷³À» Çʼö ÇʵåÈ
½Ãų ¶§ »ç¿ëÇÕ´Ï´Ù.
SQL> CREATE TABLE emp(
ename VARCHAR2(20) CONSTRAINT emp_nn_ename NOT NULL );
ÀÌ·±½ÄÀ¸·Î Çϸé ename Ä÷³¿¡´Â ²À µ¥ÀÌÅ͸¦ ÀÔ·ÂÇØ¾ß¸¸ ÇÕ´Ï´Ù.
¿©±â¼ emp_nn_enameÀº
(Å×À̺íÀ̸§_Á¦¾àÁ¶°ÇÀ̸§_Ä÷³À̸§)
Çü½ÄÀ¸·Î
CONSTRAINT NAMEÀ» Á¤ÀÇ ÇÕ´Ï´Ù.
CONSTRAINT NAMEÀº USER_CONSTRAINTS ºä(VIEW)¸¦ ÅëÇØ¼ È®ÀÎÇÒ¼ö ÀÖ½À´Ï´Ù.
SQL> SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME ='EMP' ;
CONSTRAINT_NAME
-----------------------
EMP_PK_EMPNO
ÀÌ·± ½ÄÀ¸·Î Á¦¾à»çÇ×ÀÇ À̸§À» È®ÀÎÇÒ¼ö ÀÖ½À´Ï´Ù.
UNIQUE Á¶°Ç(uk) :
µ¥ÀÌÅÍÀÇ À¯ÀϼºÀ» º¸Àå(Áߺ¹µÇ´Â µ¥ÀÌÅͰ¡ Á¸ÀçÇÒ¼ö ¾ø½À´Ï´Ù.)
ÀÚµ¿À¸·Î index°¡ »ý¼ºµË´Ï´Ù.
SQL> ALTER TABLE emp ADD CONSTRAINT emp_uk_deptno UNIQUE (deptno) ;
Å×À̺íÀÌ º¯°æµÇ¾ú½À´Ï´Ù.
ÀÌ·±½ÄÀ¸·Î Çϸé deptno Ä÷³¿¡ Áߺ¹µÈ µ¥ÀÌÅͰ¡ µé¾î°¥ ¼ö ¾ø½À´Ï´Ù.
-- Á¦¾à Á¶°ÇÀÇ »èÁ¦
SQL>ALTER TABLE emp DROP CONSTRAINT emp_uk_deptno ;
Å×À̺íÀÌ º¯°æµÇ¾ú½À´Ï´Ù.
CHECK Á¶°Ç(ck) : Ä÷³ÀÇ °ªÀ» ¾î¶² ƯÁ¤ ¹üÀ§·Î
Á¦ÇÑÇÒ ¼ö ÀÖ½À´Ï´Ù.
SQL>ALTER TABLE emp
ADD CONSTRAINT emp_ck_comm
CHECK (comm >= 10 AND comm <= 100000) ;
Å×À̺íÀÌ º¯°æµÇ¾ú½À´Ï´Ù.
commÄ÷³Àº üũÁ¶°Ç¿¡¼ Á¦ÇÑÀ» Çϰí ÀÖÀ¸¹Ç·Î 1¿¡¼ 100±îÁöÀÇ °ª¸¸À» °¡Áú¼ö ÀÖ½À´Ï´Ù.
¶Ç üũ Á¶°Ç¿¡¼´Â IN ¿¬»êÀÚ¸¦ »ç¿ëÇÒ¼ö ÀÖ½À´Ï´Ù.
-- Á¦¾à Á¶°ÇÀÇ »èÁ¦
SQL>ALTER TABLE emp DROP CONSTRAINT emp_ck_comm ;
Å×À̺íÀÌ º¯°æµÇ¾ú½À´Ï´Ù.
SQL> ALTER TABLE emp ADD CONSTRAINT emp_ck_comm
CHECK (comm IN (10000,20000,30000,40000,50000)) ;
Å×À̺íÀÌ º¯°æµÇ¾ú½À´Ï´Ù.
comm Ä÷³Àº 10000,20000,30000,40000,50000ÀÇ °ª¸¸À» °¡Áú¼ö ÀÖ½À´Ï´Ù.
DEFAULT(Ä÷³ ±âº»°ª) ÁöÁ¤ : µ¥ÀÌÅÍ ÀԷ½ÿ¡
ÀÔ·ÂÀ» ÇÏÁö ¾Ê¾Æµµ ÁöÁ¤µÈ °ªÀÌ ÀԷµɼö ÀÖ½À´Ï´Ù.
SQL>CREATE TABLE emp(
hiredate DATE DEFAULT SYSDATE ) ;
ÀÌ·±½ÄÀ¸·Î Çϸé hiredate Ä÷³¿¡ INSERT¸¦ ÇÏÁö ¾Ê¾Æµµ ¿À´Ã ³¯Â¥°¡ µé¾î°©´Ï´Ù.
PRIMARY KEY ÁöÁ¤(pk) : ±âº»Å°´Â UNIQUE ¿Í NOT NULLÀÇ °áÇÕ°ú °°½À´Ï´Ù.
¡Ø ±âº»Å°´Â ±× µ¥ÀÌÅÍ ÇàÀ» ´ëÇ¥ÇÏ´Â Ä÷³À¸·Î¼ÀÇ ¿ªÇÒÀ» ¼öÇàÇÏ¿© ´Ù¸¥ Å×ÀÌºí¿¡¼
¿Ü·¡Å°µéÀÌ ÂüÁ¶ÇÒ ¼ö Àִ Ű·Î¼ÀÇ ÀÚ°ÝÀ» °¡Áö°í ÀÖ½À´Ï´Ù. À̸¦ ÂüÁ¶ ¹«°á¼ºÀ̶ó ÇÕ´Ï´Ù.
UNIQUE Á¶°Ç°ú ¸¶Âù°¡Áö·Î ±âº»Å°¸¦ Á¤ÀÇÇϸé ÀÚµ¿À¸·Î À妽º¸¦ »ý¼ºÇϸç
±× À̸§Àº ±âº» Ű Á¦¾à Á¶°ÇÀÇ À̸§°ú °°½À´Ï´Ù.
INDEX KEY : °Ë»ö Ű·Î¼ °Ë»ö ¼Óµµ¸¦ Çâ»ó ½ÃÅ´´Ï´Ù.
(UNIQUE,PRIMARY KEY »ý¼º½Ã ÀÚµ¿ÀûÀ¸·Î »ý±è´Ï´Ù.)
SQL>CREATE TABLE emp( empno NUMBER CONSTRAINT emp_pk_empno PRIMARY KEY )
;
ÀÌ·±½ÄÀ¸·Î Çϸé empno Ä÷³¿¡ UNIQUE Á¦¾àÁ¶°Ç°ú NOT NULLÁ¦¾àÁ¶°ÇÀ» °¡Áö°Ô µË´Ï´Ù.
FOREIGN KEY(¿Ü·¡ Ű)ÁöÁ¤(fk) : ±âº»Å°¸¦ ÂüÁ¶ÇÏ´Â Ä÷³ ¶Ç´Â Ä÷³µéÀÇ ÁýÇÕÀÔ´Ï´Ù.
¡Ø ¿Ü·¡Å°¸¦ °¡Áö´Â Ä÷³ÀÇ µ¥ÀÌÅÍ ÇüÀº ¿Ü·Ú۰¡ ÂüÁ¶ÇÏ´Â ±âº»Å°ÀÇ Ä÷³°ú µ¥ÀÌÅÍÇüÀÌ
ÀÏÄ¡ÇØ¾ß ÇÕ´Ï´Ù.
À̸¦ ¾î±â¸é ÂüÁ¶¹«°á¼º Á¦¾à¿¡ÀÇÇØ Å×À̺íÀ» »ý¼ºÇÒ¼ö ¾ø½À´Ï´Ù.
¡Ø ¿Ü·¡Å°¿¡ ÀÇÇØ ÂüÁ¶µÇ°í ÀÖ´Â ±âº» Ű´Â »èÁ¦ÇÒ¼ö ¾ø´Ù.
¡Ø ON DELETE CASCADE ¿¬»êÀÚ¿Í ÇÔ²² Á¤ÀÇµÈ ¿Ü·¡Å°ÀÇ µ¥ÀÌÅÍ´Â ±× ±âº»Å°°¡ »èÁ¦ µÉ ¶§ °°ÀÌ
»èÁ¦µË´Ï´Ù.
SQL>ALTER TABLE emp ADD CONSTRAINT emp_fk_deptno FOREIGN KEY (deptno) REFERENCES dept(deptno);
Å×À̺íÀÌ º¯°æµÇ¾ú½À´Ï´Ù.
ÀÌ·±½ÄÀ¸·Î Çϸé emp Å×À̺íÀÇ deptno Ä÷³Àº dept Å×ÀÌºí¿¡ deptno Ä÷³À» ÂüÁ¶ÇÏ´Â
¿Ü·¡Å°¸¦ °¡Áö°Ô µË´Ï´Ù.
Á÷Á¢ º¯°æÇØ º¸¼¼¿ä..
Á¦¾à Á¶°ÇÀÇ È®ÀÎ
USER_CONS_COLUMNS : Ä÷³¿¡ ÇÒ´çµÈ Á¦¾à Á¶°ÇÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.
USER_CONSTRAINTS¡¡: À¯Àú°¡ ¼ÒÀ¯ÇÑ ¸ðµç Á¦¾à Á¶°ÇÀ» ºÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ µÎ°³ÀÇ µ¥ÀÌÅÍ»çÀüÀ» ÂüÁ¶ ÇÏ¸é µË´Ï´Ù.
SQL> SELECT SUBSTR(A.COLUMN_NAME,1,15) COLUMN_NAME,¡¡¡¡
¡¡¡¡¡¡¡¡ DECODE(B.CONSTRAINT_TYPE,
'P','PRIMARY KEY',
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡ 'U','UNIQUE KEY',
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡'C','CHECK OR NOT NULL',
'R','FOREIGN KEY') CONSTRAINT_TYPE,¡¡¡¡
¡¡¡¡¡¡¡¡ A.CONSTRAINT_NAME¡¡¡¡ CONSTRAINT_NAME¡¡¡¡
FROM¡¡¡¡USER_CONS_COLUMNS¡¡ A,¡¡ USER_CONSTRAINTS¡¡ B¡¡¡¡
WHERE¡¡ A.TABLE_NAME = UPPER('&table_name')¡¡¡¡
AND¡¡ A.TABLE_NAME = B.TABLE_NAME¡¡¡¡
AND¡¡ A.CONSTRAINT_NAME = B.CONSTRAINT_NAME¡¡¡¡
ORDER BY 1;¡¡¡¡
-- Å×ÀÌºí ¸íÀ» ÀÔ·Â ÇÏ¸é µË´Ï´Ù.
table_nameÀÇ °ªÀ» ÀÔ·ÂÇϽʽÿÀ: emp2
COLUMN_NAME CONSTRAINT_TYPE CONSTRAINT_NAME
------------------------------ ----------------- --------------
DEPTNO CHECK OR NOT NULL SYS_C001362
FOREIGN KEY EMP2_FK_DEPTNO
EMPNO PRIMARY KEY EMP2_PK_EMPNO
ENAME CHECK OR NOT NULL EMP2_NN_ENAME
MGR UNIQUE KEY EMP2_UP_MGR