예제 1
/*
외래키
외래키Foreign key는 테이블 간의 참조 데이터 무결성을 위한 제약조건이다.
CONSTRAINT 외래키명 FOREIGN KEY(컬럼명, ...)
REFERENCES 참조 테이블(참조 테이블 컬럼명, ...)
반드시 참조하는 테이블이 먼저 생성되어야 하며, 참조키가 참조 테이블의 기본키로 만들어져 있어야 한다.
외래키에 사용할 수 있는 컬럼 개수는 최대 32개다.
여러 컬럼을 외래키로 만들려면, 참조하는 컬럼과 외래키 컬럼의 순서와 개수는 같아야 한다.
*/
-- 1) 참조키 설정이 없는경우
--부서테이블
CREATE TABLE DEPT(
DEPT_CODE NUMBER PRIMARY KEY,
DEPT_NAME VARCHAR2(20) NOT NULL
);
--사원테이블
CREATE TABLE EMP (
ENP_NO NUMBER PRIMARY KEY,
EMP_NAME VARCHAR2(20) NOT NULL,
DEPT_CODE NUMBER -- FOREIGN KEY
);
--부서테이블 데이터 입력
INSERT INTO DEPT VALUES(1, '마케팅부');
INSERT INTO DEPT VALUES(2, '총무부');
INSERT INTO DEPT VALUES(3, '영업전략부부');
INSERT INTO DEPT VALUES(4, '인사부');
--데이터 확인
SELECT * FROM DEPT;
--사원테이블 테이터 입력 // 22번 부서코드가 존재하지 않아도 테이블끼리의 관계가 설정되어 있지않아서 테이터 입력이 가능하다
INSERT INTO EMP VALUES(100, '김동연', 22); -- 22번 부서코드는 존재하지 않는다.
--데이터 확인 // 정상 가동
SELECT * FROM EMP;
예제 2
-- 참조키 설정이 있는 경우
CREATE TABLE NEW_DEPT(
DEPT_CODE NUMBER PRIMARY KEY,
DEPT_NAME VARCHAR2(20) NOT NULL
);
--사원테이블
CREATE TABLE NEW_EMP (
ENP_NO NUMBER PRIMARY KEY,
EMP_NAME VARCHAR2(20) NOT NULL,
DEPT_CODE NUMBER, --NULL
FOREIGN KEY(DEPT_CODE) REFERENCES NEW_DEPT(DEPT_CODE)
);
--부서테이블 데이터 입력
INSERT INTO NEW_DEPT VALUES(1, '마케팅부');
INSERT INTO NEW_DEPT VALUES(2, '총무부');
INSERT INTO NEW_DEPT VALUES(3, '영업전략부부');
INSERT INTO NEW_DEPT VALUES(4, '인사부');
-- 사원테이블 데이터 입력
INSERT INTO NEW_EMP VALUES(100, '김동연', 22) -- 참조키 설정으로 오류발생
--ORA-02291: integrity constraint (ORA_USER.SYS_C007188) violated - parent key not found
INSERT INTO NEW_EMP VALUES(100, '김동연', 2); -- 범위에 포함되어 있기에 작동 성공
INSERT INTO NEW_EMP VALUES(101, '송지은', NULL);
--데이터 확인
SELECT * FROM NEW_EMP;
'Data base' 카테고리의 다른 글
DEFAULT (0) | 2022.10.14 |
---|---|
CHECK (0) | 2022.10.14 |
기본키(Primary key) (0) | 2022.10.14 |
UNIQUE (0) | 2022.10.14 |
NULL, 제약조건(Constraints),시스템 뷰 (0) | 2022.10.14 |