데이터베이스에는 관계형과 비관계형이 있다.
그중에 관계형 데이터 베이스를 알아보자.
말그대로 데이터베이스 간에 관계가 있다는 것이다.
데이터는 행(row)과 열(column)으로 이루어진 2차원 테이블로 표현할 수 있다.
즉, 테이블간에 관계가 있다는 말이다.
그 관계에는 3가지 유형이 있다.
1. One to One
2. One to Many
3. Many to Many
말그대로 일대일 관계이다.
A테이블의 데이터와 B테이블의 데이터가 일대일로만 대응이 되는 경우이다.
A테이블에는 name
, B테이블에는 주민번호
, name_id
의 컬럼을 갖고있다고 하면
어떤 사람은 하나의 주민번호를 갖고있을수 있으므로 일대일 관계인것이다.
이때 각 테이블의 id 컬럼은 Primary Key(PK)
라고 하고
그 PK를 참조하고 있는 user_id 컬럼을 Foreign Key(FK)
라고 한다.
일대다의 관계로 한 테이블의 로우하나가 다른 테이블의 여러 로우와 연결되는 경우를 말한다.
다대다 관계로 A 테이블의 로우가 B 테이블의 여러 로우와 연결될수 있고, B 테이블의 로우가 A 테이블의 로우와 연결이 될 수 있는 경우이다.
예시를 보면서 이해하자.
작가한명이 여러 책을 쓸 수있고, 책의 작가가 여러명이 될 수 있다.
데이터를 담는 행에는 여러 데이터가 들어갈 수 없기 때문에 다시 풀어 보면
위와 같이 데이터가 구성하면 중복되는 것들이 너무 많고 추가될수록 중복이 더 늘어날 것이다.
FK를 이용해서 다대다 관계의 데이터베이스를 구성하면
mySQL의 쿼리문을 활용해서 데이터베이스를 생성하고 삭제할 수 있다.
쿼리문에는 몇가지 특징이 있다.
마지막은 ;
을 통해서 정해준다.
대소문자를 구분하지 않는다.
주석처리는 #
으로 해준다.
CREATE DATABASE database_name; # 데이터베이스를 생성하는 명령어
SHOW DATABASES; # 현재 MySQL에 저장된 데이터베이스를 보는 명령어
USE database_name; # 해당 데이터베이스에 접근하는 명령어
SHOW tables; # 접근한 데이터베이스의 테이블을 보는 명령어
CREATE users
(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
phone VARCHAR(20),
pet_id INT,
PRIMARY KEY (id),
FOREIGN KEY (pet_id) REFERENCE pet (id)
);
DESC users # 테이블의 기본 형태를 확인 할수있다.
INSERT INTO 테이블명 (컬럼명) VALUES ('내용');
INSERT INTO user (name) VALUES ('김코드');
UPDATE 테이블명 SET 컬럼명='수정할내용' WHERE id=2;
#WHERE을 통해서 특정 로우를 선택해서 그 행의 컬럼을 수정한다.
UPDATE user SET name='김개발' WHERE id=2;
DELETE FROM 테이블명 WHERE name='찾을이름';
# WHERE로 찾은 행을 삭제한다.
DELETE FROM user WHERE name='김개발';
SELECT 불러오고 싶은 컬럼명 FROM 테이블명
# * 은 모두를 뜻하므로 모든 컬럼값을 불러온다.
SELECT * FROM users # users 테이블의 모든 데이터 값을 볼 수 있다.
SELECT name FROM users # user 테이블의 name 컬럼만 불러 올 수 있다.
FOREIGN KEY를 이용해서 연관된 데이터를 여러 테이블에서 가지고 올 수도 있다.
JOIN
을 활용하는 방법이다.
SELECT artists.name, songs.title, # 불러오고 싶은 컬럼 값을 넣는다.
FROM artists,
JOIN songs, # artists 테이블과 songs 테이블을 결합한다.
ON artists.id = songs.artist_id; foreign key로 연결시켜준다.