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 |