일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- SQL
- 10951
- Eclipse
- n x 2 타일링 2
- 알고리즘
- darkest dark
- 문자열
- 오라클
- DP
- 반복문
- 백준
- Java
- Algorithm
- Dynamic Programming
- 동적계획법
- 데이터베이스
- algoritm
- 소숫점처리
- 2156
- JOIN
- select
- 변수
- oracle
- 데이터길이
- ANSI JOIN
- db
- 입출력
- 자바
- 그대로 출력하기
- Database
Archives
- Today
- Total
Cracking Code
SQL - FOREIGN KEY (외래키) 본문
테이블이 다른 테이블을 참조하여 데이터를 읽을 수 있도록 관계를 형성하는 외래키에 대해 알아봅시다.
-- COLUMN LEVEL
column datatype [CONSTRAINT constraint_name]
REFERENCES table (column1[, column2, ...] [ON DELETE CASCADE])
-- TABLE LEVEL
[CONSTRAINT constraint_name] FOREIGN KEY (column1[, column2, ...])
REFERENCES table (column1[, column2, ...] [ON DELETE CASCADE])
외래키로 열 또는 열의 집합을 지정할 수 있으며 동일 테이블 또는 다른 테이블 간 관계를 지정합니다
ON DELETE CASCADE 또는 SET NULL을 사용하여
부모 행이 삭제 될 시 해당 행의 삭제 또는 NULL 값으로 변할 지 정할 수 있습니다.
🔥부모 행: 정보를 주는 행, 자식 행: 정보를 받는 행
두 개의 테이블을 만들어보도록 하겠습니다.
CREATE TABLE DEPT_P(
DEPTNO NUMBER(2)
CONSTRAINT DEPT_C_DEPTNO_PK PRIMARY KEY,
DNAME VARCHAR2(10),
LOC VARCHAR2(10)
);
CREATE TABLE EMP_C(
EMPNO NUMBER(4)
CONSTRAINT EMP_C_EMPNO_PK PRIMARY KEY,
ENAME VARCHAR2(10),
SAL NUMBER(10),
DEPTNO NUMBER(2) -- DEPT_P를 참조하는 외래키
CONSTRAINT EMP_C_DEPTNO_FK
REFERENCES DEPT_P(DEPTNO)
);
EMP_C 테이블에서 DEPTNO 컬럼은 DEPT_P의 DEPTNO 컬럼을 기준으로 참조할 수 있게 하였습니다.
정보를 빼오는 테스트를 하기 전에 DEPT_P 에 약간의 정보를 채워보겠습니다.
INSERT INTO DEPT_P VALUES(10, '인사', '서울');
INSERT INTO DEPT_P VALUES(20, '경리', '부산');
INSERT INTO DEPT_P VALUES(30, '관리', '대구');
현재 10번, 20번, 30번 부서가 있는 상황입니다.
제약 조건이 잘 성립되었는지 확인하기 위해 부서에 없는 40번 부서를 가진 사원을 입력해보겠습니다.
INSERT INTO EMP_C
VALUES(1111, 'WOOZYA', 2000, 40);
부모 테이블(DEPT_P)에 제약 조건이 걸려있는 40번의 참조 대상인 DEPTNO가 존재하지 않아
부모 키가 없다는 오류 메시지와 함께 수행이 되지 않는 모습을 볼 수 있습니다.
'Database' 카테고리의 다른 글
SQL - ALTER TABLE (0) | 2020.07.22 |
---|---|
SQL - DROP TABLE (0) | 2020.07.21 |
SQL - CHECK (0) | 2020.07.21 |
SQL - UNIQUE KEY (유니크 키) (0) | 2020.07.21 |
SQL - PRIMARY KEY (기본키) (0) | 2020.07.21 |
Comments