Å×À̺íÀÇ Á¦¾àÁ¶°Ç

Á¦¾àÁ¶°Ç (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