데이터의 무결성을 지키기 위해 제한한(된) 규칙
MySQL에서 사용할 수 있는 제약 조건
1. NOT NULL - 해당 필드는 NULL값 저장 불가(무조건 데이터를 가지고 있어야함)
2. UNIQUE - 해당 필드는 서로 다른 값을 가져야함(중복된 값 저장 금지)
3. PRIMARY KEY(아래 설명)
4. FOREIGN KEY(아래 설명)
5. DEFAULT - 해당 필드의 기본값을 설정 할 수 있게 해준다.
create table table_name
(
column1 datatype NOT NULL,
column2 datatype NOT NULL,
...
CONSTRAINT constraint_name
PRIMARY KEY (column1, column2, ...)
);
- 단일 컬럼 primary key 생성
create table person
(
pid int NOT NULL,
name varchar(16),
age int,
sex char,
primary key (pid)
);
- 다중 컬럼 primary key 생성
create table animal
(
name varchar(16) NOT NULL,
type varchar(16) NOT NULL,
age int,
primary key (name, type)
);
ALTER TABLE tablename
DROP PRIMARY KEY;
- 단일 컬럼 primary key 삭제
ALTER TABLE PERSON
DROP PRIMARY KEY;
- 다중 컬럼 primary key 삭제
단일과 방법은 동일하다.
ALTER TABLE animal
DROP primary key;
ALTER TABLE table_name
add primary key (column1, column2, ...);
- 단일 컬럼 primary key 생성
ALTER TABLE person
add primary key (pid);
- 다중 컬럼 primary key 생성
ALTER TABLE animal
add constraint PK_animal
PRIMARY KEY (name, type);
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, ...) REFERNCES REF_tablename(REF_column)
);
자동 생성된 CONSTRAINT 를 확인하는 방법
SHOW CREATE TABLE tablename;
ALTER TABLE tablename
DROP FOREIGN KEY FK_constraint;
Table 이 생성된 이후에도 ALTER TABLE 을 통해 FOREIGN KEY 를 지정할 수 있다.
ALTER TABLE tablename
ADD FOREIGN (column) REFERENCES REF_tablename(REF_column);
- FOREIGN KEY 생성 예제
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)
);
- FOREIGN KEY 생성 예제
CREATE TABLE 에서 FOREIGN KEY를 지정하는 경우, CONSTRAINT 를 생략할 수 있다.
create table job
(
jid int not null,
name varchar(16),
pid int,
primary key (jid),
foreign key (pid) references person(pid)
);
- FOREIGN KEY 삭제 예제
alter table orders
drop foreign key FK_person;
외래키가 끊어진 것을 알 수 있다.
- Table 이 생성된 이후 ALTER TABLE 을 통해 FOREIGN KEY 를 지정
alter table orders
add foreign key (pid) references person(pid);
1. police_station 과 crime_status 테이블 사이에 관계 (Foreign Key)를 설정해 봅시다.
AWS RDS(database-1) 의 zerobase 에서 작업합니다.
- 확인
- police_station table
# 중복을 제거하고 개수 가져오기
select count(distinct name) from police_station;
- crime_status table
select count(distinct police_station) from crime_status;
select distinct name from police_station limit 3;
select distinct police_station from crime_status limit 3;
- 두 테이블 경찰서명 맞춰주기
select c.police_station, p.name
from crime_status c, police_station p
where p.name like concat('서울', c.police_station, '경찰서')
group by c.police_station, p.name;
- primary key 생성
1. police_station 테이블의 name 컬럼 기본키로 만들기
alter table police_station
add primary key (name);
2.crime_status 테이블의 컬럼 생성 후 foreign key로 만들기
alter table crime_status
add column reference varchar(16);
alter table crime_status
add foreign key(reference) references police_station(name);
- reference 컬럼 내용 채우기
update crime_status c, police_station p
-> set c.reference = p.name
-> where p.name like concat('서울', c.police_station, '경찰서');
데이터 확인
select distinct police_station, reference from crime_status;
3. join
select c.police_station, p.address
from crime_status c, police_station p
where c.reference = p.name
group by c.police_station;
"이 글은 제로베이스 데이터 취업 스쿨 강의를 듣고 작성한 내용으로 제로베이스 데이터 취업 스쿨 강의 자료 일부를 발췌한 내용이 포함되어 있습니다."