[TIL] PRIMARY/FOREIGN KEY

썹스·2024년 2월 11일

SQL

목록 보기
13/17

📌 PRIMARY KEY

기본키(PRIMARY KEY)는 데이터 테이블의 각 행(row)을 고유하게 식별하는 열(column)로, 중복된 값을 허용하지 않는다.

이를 통해 데이터의 무결성을 유지하고, 빠른 데이터 접근할 수 있다.

  • 기본키의 특징은 아래와 같다.
    • 테이블의 각 레코드를 식별
    • 중복되지 않는 고유값을 사용
    • NULL값을 포함할 수 없음
    • 테이블 당 하나의 기본키를 가짐 (여러 속성을 하나로 묶어 1개의 기본키로 사용 가능)

✅ 기본키 생성 문법

create table <테이블명>
(
   column01 datatype NOT NULL,
   column02 datatype NOT NULL,
   ...
   constraint conastraintName   # 해당 문구는 생략 가능
                                # conastraintName은 일반적으로 PK_<테이블명> 처럼 만듬
   primary key(column01, column02, ...)
);

-------------------------------------------------------------------------------

create table person
(
   id int NOT NULL,
   name varchar(16),
   age int,
   primary key(id)
);

✅ 기본키 삭제 문법

한 번에 모든 키본키를 삭제(부분 칼럼만을 삭제할 순 없다.)

alter table <테이블명>
drop primary key;

-------------------------------------------------------------------------------

alter table person
drop primary key; 

✅ 기본키 추가 문법

alter table <테이블명>
add primary key(column01, column02, ...);

-------------------------------------------------------------------------------

alter table person
add primary key(id);

📌 FOREIGN KEY

외래키(FOREIGN KEY)는 한 테이블의 열(column)이 다른 테이블의 기본키(PRIMARY KEY)와 연결된다는 제약 조건의 키(KEY)이다. 이를 통해 테이블 간의 관계를 정의하고 데이터 무결성을 유지할 수 있다.

✅ 외래키 생성 문법

craete table <테이블명>
(
   column01 datatype NOT NULL,
   column02 datatype NOT NULL,
   column03 datatype,
   column04 datatype,
   ...
   constraint <기본키 제약명>   // 생략 가능
   primary key(column01, column02),
   
   constraint <외래키 제약명>   // 생략 가능, 하지만 외래키 삭재 시 불편할 수 있다.
   foreign key(column03, column04) references <참조할 테이블명>(<참조 칼럼명>)
);

-------------------------------------------------------------------------------

create table orders
(
   oid int not null,
   order_no varchar(16),
   pid int,
   
   primary key(oid),
   constraint FK_person foreign key(pid) references person(pid)
);

✅ 외래키 삭제 문법

왜래키 제약명을 생략하고 테이블을 생성할 경우, show create table <테이블명> 쿼리문을 작성하여 확인할 수 있다.

alter table <테이블명>
drop foreign key <삭제할 외래키 제약명>;

-------------------------------------------------------------------------------

alter table orders
drop foreign key FK_person;

✅ 외래키 추가 문법

alter table <테이블명>
add foreign key (<추가할 외래키 칼럼>) references <참조할 테이블명>(참조 칼럼명)

-------------------------------------------------------------------------------

alter table orders
add foreign key (pid) references person(pid);
profile
코린이

0개의 댓글