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를 사용하면 데이터의 무결성을 보장할 수 있으며, 데이터베이스 관리자가 원하지 않는 데이터가 삽입되거나 갱신되는 것을 방지할 수 있다.
기본키를 삭제할 때는 기본키로 설정된 컬럼의 개수와 상관없이 방법은 동일하다.
alter table table_name drop primary key;
이미 생성된 Table 에 기본키만 추가해주는 방법
☁ 하나의 컬럼을 기본키로 설정하는 경우
alter table table_name add primary key (column1);
☁ 여러개의 컬럼을 기본키로 설정하는 경우
alter table table_name
add constraint constraint_name primary key (column1, column2, ...);
# constraint 는 생략 가능
한 테이블을 다른 테이블과 연결해주는 역할을 하며, 참조되는 테이블의 항목은 그 테이블의 기본키 (혹은 단일값)
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;
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 관계는 깨져있다.
이미 생성된 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 이 이전과 바뀌게 된다.
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.name
과 crime_status.police_station
을 매칭하여 관계를 맺도록 하자.
✍
count(distinct name) : name 컬럼을 중복되지 않게 count 해줘
3) police_station의 name
컬럼과 crime_status의 police_station
컬럼의 데이터 3개씩만 조회해보자.
=> 경찰서 이름이 각 테이블에서 표시되는 형식이 다르다.
4) crime_status.police_station
과 police_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로 등록하세요.