SQL (PRIMARY KEY, FOREIGN KEY)

·2023년 4월 29일
0

SQL

목록 보기
7/11

📌 PRIMARY KEY

  • 테이블의 각 레코드를 식별한다.
  • 중복되지 않은 고유값을 포함한다.
  • NULL 값을 포함할 수 없다.
  • 테이블 당 하나의 기본키를 가진다.

📒 PRIMARY KEY 생성 (1)

Table 을 생성하면서 기본키를 지정하는 방법

☁ 하나의 컬럼을 기본키로 설정하는 경우

create table table_name
(
	column1 datatype not null,
    column2 datatype,
    ... ,
    primary key (column1)  
);


☁ 여러개의 컬럼을 기본키로 설정하는 경우

create table table_name
(
	column1 datatype not null,
    column2 datatype not null,
    ... ,
    constraint constraint_name  # 생략 가능
    primary key (column1, column2, ...)  
);

constraint는 데이터베이스 테이블의 컬럼이나 테이블 전체에 대한 규칙을 말한다. constraint를 사용하면 데이터의 무결성을 보장할 수 있으며, 데이터베이스 관리자가 원하지 않는 데이터가 삽입되거나 갱신되는 것을 방지할 수 있다.



📒 PRIMARY KEY 삭제

기본키를 삭제할 때는 기본키로 설정된 컬럼의 개수와 상관없이 방법은 동일하다.

alter table table_name drop primary key;



📒 PRIMARY KEY 생성 (2)

이미 생성된 Table 에 기본키만 추가해주는 방법

☁ 하나의 컬럼을 기본키로 설정하는 경우

alter table table_name add primary key (column1);


☁ 여러개의 컬럼을 기본키로 설정하는 경우

alter table table_name 
add constraint constraint_name primary key (column1, column2, ...);
# constraint 는 생략 가능




📌 FOREIGN KEY

한 테이블을 다른 테이블과 연결해주는 역할을 하며, 참조되는 테이블의 항목은 그 테이블의 기본키 (혹은 단일값)

📒 FOREIGN KEY 생성 (1)

Table 을 생성하면서 외래키를 지정하는 방법

# constraint 이름 지정
create table table_name
(
    column1 datatype not null,
    column2 datatype not null,
    column3 datatype,
    column4 datatype,
    ...
    constraint constraint_name
    primary key (column1, column2, ...),
    constraint constraint_name
    foreign key (column3, column4, ...) references ref_tablename(ref_column)
);


# constraint 자동 생성
create table table_name
(
    column1 datatype not null,
    column2 datatype not null,
    column3 datatype,
    column4 datatype,
    ...
    constraint constraint_name
    primary key (column1, column2, ...),
    foreign key (column3, column4, ...) references ref_tablename(ref_column)
);

☁ CONSTRAINT 직접 지정하기


☁ CONSTRAINT 생략하는 경우, 자동 생성

# 자동 생성된 constraint 를 확인하는 방법
show create table table_name;



📒 FOREIGN KEY 삭제

alter table table_name
drop foreign key FK_constraint;

=> MUL 이 안 없어져서 삭제된 게 맞나 확인해보니 KEY `FK_person` (`pid`) 를 확인 했다.

FOREIGN KEY 속성 일 경우, FOREIGN KEY (`pid`) REFERENCES `person` (`pid`)
KEY 속성 일 경우, KEY `FK_person` (`pid`) 

즉, FOREIGN KEY 가 삭제되고, KEY 속성만 남아서 reference 관계는 깨져있다.



📒 FOREIGN KEY 생성 (2)

이미 생성된 Table 에 외래키만 추가해주는 방법

# constraint 이름 지정
alter table table_name
add constraint constraint_name 
foreign key (column) references ref_tablename(ref_column); 


# constraint 자동 생성
alter table table_name
add foreign key (column) references ref_tablename(ref_column);

constraint 이름은 지정해주지 않아서 constraint 가 자동 생성된다. 그래서 constraint_name 이 이전과 바뀌게 된다.



📒 FOREIGN KEY 예제

police_station 과 crime_status 테이블 사이에 관계를 설정해보자. (Foreign Key)

1) AWS RDS(database-1) 의 mydb 에서 작업하자.

2) police_station의 name 컬럼과 crime_status의 police_station 컬럼의 데이터 개수 조회해보자.

mysql -h 'endpoint' -P 'port' -u 'username' -p

=> police_station.namecrime_status.police_station 을 매칭하여 관계를 맺도록 하자.


count(distinct name) : name 컬럼을 중복되지 않게 count 해줘



3) police_station의 name 컬럼과 crime_status의 police_station 컬럼의 데이터 3개씩만 조회해보자.

=> 경찰서 이름이 각 테이블에서 표시되는 형식이 다르다.



4) crime_status.police_stationpolice_station.name 을 매칭시켜주자.



5) police_staion.name을 Primary Key로 설정하자.

6) crime_status 테이블에 Foreign Key 로 사용할 컬럼을 추가하자.


7) crime_status 테이블의 reference 컬럼에 Foreign Key를 지정하자.

8) 비어있는 reference 컬럼 안에 데이터를 넣어주자.


9) JOIN : Foreign Key 를 기준으로 두 테이블을 연관시켜 검색할 수 있다.




📌 실습

1) 다음과 같이 study_id 가 PRIMARY KEY, patient_id 가 person 테이블의 pid 와 연결된
FOREIGN KEY 로 지정된 study 테이블을 생성하세요.

2) 생성한 테이블의 PRIMARY KEY 를 삭제하세요.

3) 생성한 테이블의 FOREIGN KEY 를 삭제하세요.

4) study 테이블의 patient_id 를 person 테이블의 pid 와 연결된 FOREIGN KEY 로 등록하세요.

5) study 테이블의 study_id 를 PRIMARY KEY로 등록하세요.




0개의 댓글