제약2 - FOREIGN KEY(참조키), CASECADE
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 : 쓰지 않아도 디폴트값으로 가지고 있다. 동작하지 않는다는 것.