RDB에서는 primary key와 foreign key라는 것을 사용합니다.
1. Primary key (pk)
프라이머리 키로 설정된 column의 데이터들은 중복되지 않는 값을 가집니다. 그렇기 때문에 프라이머리 키를 사용하면 모든 행에 고유한 id를 부여할 수 있게 됩니다. id 처럼 사용되기 때문에 id라고 주로 이름 붙이고는 합니다.
primary key를 생성하는 방법은 table을 생성할 때 미리 만들 수도 있고,
기존에 생성된 table에 추가할 수도 있습니다.
1) table 생성 시에 같이 생성하기
CREATE TABLE users (
ID int NOT NULL, //pk될 column의 data는 null값을 가지면 안됩니다.
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID) //ID를 pk로 설정
);
2) 기존에 생성된 table에 추가하기
primary key 없이 table을 만들었는데, id column을 추가해서 해당 column을 pk로 사용하고 싶다면 아래처럼 설정하면 됩니다.
먼저 int type의 id column을 생성해 주듯이 쿼리문을 작성하고
뒤에 primary key가 갖는 특성인 not null과 auto_increment를 명시해주고
primary key가 될 것이라는 말까지 붙여주면 됩니다.
ALTER TABLE user
ADD COLUMN id int NOT NULL AUTO_INCREMENT PRIMARY KEY;
2. Foreign key (fk)
Foreign key는 table 간의 관계를 만들어 주는 역할을 합니다.
table 간의 관계는 1:1 , 1:N, N:N으로 나뉠 수 있는데, 어떤 관계에서 던지 fk는 사용될 수 있습니다.
1 : N 관계의 경우에는 foreign key를 N에 해당하는 table에 설정해주면 됩니다!
어떻게 설정하는 지 보겠습니다.
CREATE TABLE class(
classID int NOT NULL AUTO_INCREMENT,
className varchar(255)
PRIMARY KEY(classID);
);
(class table은 위처럼 구성되어 있고, classID가 pk 입니다.)
user table과 class table이 있고, 여러명의 user들이 한 class를 수강할 수 있는 형태라고 가정하겠습니다.
그렇다면 user가 N이 되겠고 class가 1이 되겠죠? 그렇다면 foreign key를 어디에 만들어야 할까요?
바로 user table에 설정해주면 되겠습니다.
1) table 생성 시에 같이 생성하기
지금까지 user table로 예를 들었지만, 아직 생성되지 않은 테이블이라고 가정하고 새롭게 생성해보겠습니다.
CREATE TABLE user (
id int NOT NULL AUTO_INCREMENT,
name varchar(255),
email varchar(255),
classID int NOT NULL,
PRIMARY KEY (id),
//fk 설정
FOREIGN KEY (classID) REFERENCES Persons(PersonID)
);
2) 기존에 생성된 table에 추가하기
user table이 이미 생성된 상태에서 foreign key를 추가하려면 아래처럼 해주면 됩니다.
alter table user
add column classID int not null;
먼저 fk로 이용할 classID column을 생성해줍니다.
이렇게 하면 아래처럼 0 값으로 초기화되어 있게 됩니다.
그러면 각 row마다 classID를 설정해줍니다.
예를 들어서 위와 같이 classID를 설정해준 다음에
ALTER TABLE user
ADD FOREIGN KEY(classID) REFERENCES class(classID);
와 같이 쿼리를 해주면 정상적으로 fk가 설정되게 됩니다!
참고 사이트
https://blog.daum.net/question0921/539
'DataBase > mysql' 카테고리의 다른 글
Spring 사용 시 DB를 H2에서 MySQL로 변경하기(JPA사용) (0) | 2022.08.31 |
---|---|
Join 알아보기 (4) | 2022.06.13 |
맥 터미널로 mysql 사용하기 (0) | 2022.06.12 |