⭐️ 기본키
기본키 ( PRIMARY KEY )란 테이블에서각 행 ( ROW )를 식별하기 위해 사용될 컬럼에 부여하는 제약조건( 식별자 역할 ).
기본키는 또한 제약조건이 NOT NULL + UNIQUE 제약조건이 합쳐진 것이다.
위 사진을 보면 EMP_ID 라는 고유한 식별자가 존재한다. 식별키는 예를 들어 회원번호 , 학번 , 군번 ,
부서코드 , 직급코드 , 주민등록번호 , 택배운송장 번호 , 예약번호 등등 여러가지가 될 수 있다 ‼️
그리고 테이블당 1개만 설정이 가능한다.
[코드]
CREATE TABLE MEM_PRI(
MEM_NO NUMBER CONSTRAINT MEMNO_PK PRIMARY KEY,
MEM_ID VARCHAR2(20) NOT NULL,
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
GENDER CHAR(3) CHECK(GENDER IN ('남','여')),
PHONE VARCHAR2(13),
EMAIL VARCHAR2 (50),
MEM_DATE DATE,
UNIQUE(MEM_ID)
-- PRIMARY KEY(MEM_NO)
);
이런식으로 PRIMARY KEY를 설정해줄 수 있다. 아래 주석은 테이블레벨 방식으로 추가한 것이다.
⭐️ 외래키
외래키 ( FOREIGN KEY ) 란 다른 테이블에 존재하는 값만 들어와야되는 특정 컬럼에 부여하는 제약조건.
-> 다른 테이블을 "참조" 한다고 표현한다.
-> 주로 FOREIGN KEY 제약조건으로 인해 테이블 관계가 형성된다.
-> 컬럼레벨 방식 : 컬럼명 자료형 REFERENCES 참조할 테이블명 [참조할 컬럼명]
-> 테이블레벨 방식 : FOREIGN KEY (컬럼명) REFERENCES 참조할 테이블명 [참조할 컬럼명]
참조할 컬럼명 생략시 참조할 테이블의 PRIMARY KEY로 지정된 컬럼이 매칭된다 ‼️
[코드]
CREATE TABLE MEM(
MEM_NO NUMBER PRIMARY KEY,
MEM_ID VARCHAR2(20) NOT NULL,
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
GENDER CHAR(3) CHECK(GENDER IN ('남','여')),
PHONE VARCHAR2(13),
EMAIL VARCHAR2 (50),
MEM_DATE DATE,
GRADE_ID NUMBER REFERENCES MEM_GRADE(GRADE_CODE)
);
위와같이 REFERENCES 참조할 테이블 (참조할 컬럼명) 형식으로 작성하여 FOREIGN KEY를 생성한다.
부모가 되는 MEM_GRADE 테이블의 GRADE_CODE를 참조한다 , 즉 MEM_GRADE 테이블이 부모가 되고,
MEM 테이블은 자식 테이블이 된다.
-> MEM 테이블에서 GRADE_ID가 MEM_GRADE 테이블의 GRADE_CODE를 참조하기 때문에 ,
GRADE_ID 가 FOREIGN KEY가 된다 ‼️
[MEM_GRADE 테이블]
CREATE TABLE MEM_GRADE (
GRADE_CODE NUMBER PRIMARY KEY,
GRADE_NAME VARCHAR2(30) NOT NULL
);
INSERT INTO MEM_GRADE VALUES(10,'일반회원');
INSERT INTO MEM_GRADE VALUES(20,'우수회원');
INSERT INTO MEM_GRADE VALUES(30,'특별회원');
INSERT INTO MEM_GRADE VALUES(40,'VIP회원');
SELECT * FROM MEM_GRADE;
MEMBER_GRADE에 GRADE_CODE 컬럼을 MEM 테이블에서 사용하는 중이다.
[MEM 테이블]
CREATE TABLE MEM(
MEM_NO NUMBER PRIMARY KEY,
MEM_ID VARCHAR2(20) NOT NULL,
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
GENDER CHAR(3) CHECK(GENDER IN ('남','여')),
PHONE VARCHAR2(13),
EMAIL VARCHAR2 (50),
MEM_DATE DATE,
GRADE_ID NUMBER REFERENCES MEM_GRADE(GRADE_CODE) ON DELETE SET NULL
);
INSERT INTO MEM
VALUES(1,'USER1','PASS1','김진일', NULL,'010-1111-1111','AAA@AA.COM','24/12/23', NULL);
INSERT INTO MEM
VALUES(2,'USER2','PASS2','김진이', NULL,'010-1111-1111','AAA@AA.COM','24/12/23', 10);
INSERT INTO MEM
VALUES(3,'USER3','PASS3','김진삼', NULL,'010-1111-1111','AAA@AA.COM','24/12/23', 20);
INSERT INTO MEM
VALUES(4,'USER4','PASS4','김진사', NULL,'010-1111-1111','AAA@AA.COM','24/12/23', 30);
이렇게 MEMGRADE 테이블에 있는 GRADE_CODE ( MEMGRADE 테이블의 PRIMARY KEY ) 를
MEM 테이블에서 GRADE_ID 가 참조 하고 있다. 이게 바로 PRIMARY KEY이다.
기본키와 외래키를 사용해서 테이블간 연결인 JOIN을 사용할 수 있다는걸 꺠달았다.
SQL도 정말 하다보면 재미있는거 같다 ‼️
'Back End > DataBase' 카테고리의 다른 글
VIEW 생성시 함수식이나 산술연산식에 별칭을 부여해야 하는 이유 (0) | 2024.12.28 |
---|---|
데이터 조작어 (DML : DATE MANIPULATION LANGUAGE)에 대하여 (3) | 2024.12.24 |
CREATE에 대하여 (2) | 2024.12.23 |
Inline View (인라인뷰)에 대하여 (0) | 2024.12.20 |
JOIN에 대하여 (4) | 2024.12.18 |