728x90

FOREIGN KEY(참조키)


참조 되어지는 테이블에는 기본키혹은 유니크가 설정이 되어있어야하며
참조 하려는 테이블에는 참조키가 설정이 되어있어야 한다.

부모 테이블의 기본키 컬럼이 자식 테이블에 컬럼을 따로 만들지 않아도 자동으로 넘어감..


<테이블명 : 부서>                              <테이블명 : 입사지원>
------------------                        -------------------------
부서번호 |  부서명                             번호   |   이름     |  부서번호                           
------------------                        -------------------------
10              전산실                               1          이순신         10         
20              총무부                               2          홍길동         30
30              영업부                               3          김유신         30


CREATE TABLE 부서
(부서번호 INT CONSTRAINT PK_부서_부서번호 PRIMARY KEY,  //기본키
 
부서명 CHAR(20))


INSERT INTO 부서 VALUES(10,'전산실')
INSERT INTO 부서 VALUES(20,'총무부')
INSERT INTO 부서 VALUES(30,'영업부')


CREATE TABLE 입사지원
(번호 INT,
 이름 CHAR(10),
 부서번호 INT CONSTRAINT FK_입사지원_부서번호
              FOREIGN KEY REFERENCES 부서(부서번호)) //참조키


INSERT INTO 입사지원 VALUES(1,'이순신', 10)
INSERT INTO 입사지원 VALUES(2,'홍길동',30)
INSERT INTO 입사지원 VALUES(3,'김유신', 30)
INSERT INTO 입사지원 VALUES(4,'허준', 40)

//마지막 쿼리 에러.. 참조하는 부서번호에 40번이 없기때문에...



//참조하는 것이 있으면, 수정 및 삭제할수 없다.

UPDATE 부서
SET 부서번호=100
WHERE 부서번호=10

-->에러!!

 

//참조하는 것이 없기 때문에 수정및 삭제가 가능하다.

UPDATE 부서
SET 부서번호=200
WHERE 부서번호 =20


//참조하고 있는 것을 강제로 수정 및 삭제하려면 (CASECADE 사용)

① 입사지원의 참조키 제약을 지우고 수정 및 삭제를 한다.


ALTER TABLE 입사지원
DROP CONSTRAINT FK_입사지원_부서번호


② 처음에 FOREIGN 제약에 조건을 넣어서 테이블을 생성, 혹은 다음과 같이 수정해보자

ALTER TABLE 입사지원
ADD CONSTRAINT FK_입사지원_부서번호
            FOREIGN KEY(부서번호) REFERENCES 부서(부서번호)
             ON UPDATE CASCADE
             ON DELETE NO ACTION


※알아두기

    CASCADE : 연속동작, 참조하고 있다하더라도 참조당하는 것이 바뀌면 참조하는 것도 바뀜
    NO ACTION : 쓰지 않아도 디폴트값으로 가지고 있다. 동작하지 않는다는 것.

'데이터베이스 > SQL Server' 카테고리의 다른 글

sp_depends  (0) 2008.04.29
Table 변수 값넣기 - 2000, 2005 비교  (0) 2008.04.29
제약조건  (0) 2008.04.29
MSSQL2000 - sp_makewebtask - 쿼리의 결과를 HTML로  (0) 2008.04.29
View안에 StoredProcedure를 쓰는 방법  (0) 2008.04.29

+ Recent posts