MySQL(1) - DB 구축

Cein1·2022년 10월 9일
0

Database

목록 보기
3/4

관계형 데이터베이스를 하드웨어(SSD - 영구저장)에 저장하는 것을 도와주는 소프트웨어
ERD를 잘 작성했는지 확인해보려면 테스트 데이터를 넣어보면 된다.
dbmate는 데이터는 관리하지 않고, 테이블 형상만 관리합니다.
데이터 관리하는 툴은 따로 없고, dump해서 백업해놓고 필요하면 불러들인다

Structured Query Language (SQL)

테이블 생성/수정/삭제

0. DB 구축과정

Step 1. 스키마 설계

목적: 웹 서비스에 필요한 데이터를 체계적으로 저장
방법: 정규화된 2차원 테이블을 작성해서 구축해나가는 과정

Step 2. 데이터베이스(=스키마) 생성

스키마 설계가 끝난 이후, 실제 물리적인 서버에서 RDBMS 소프트웨어(ex. MySQL)를 설치하고 DB를 구축합니다.

  • DB 객체를 담는 컨테이너

Step 3. DB 내 객체 생성

DB 객체에는 Table, View, Index, Procedure 등이 있습니다.
DB 객체 명명규칙

  • 기존 이름/예약어와 중복 불가
  • 숫자로 시작 불가
  • 기호는 '_'만 사용 가능
  • 한글을 사용할 때는 더블쿼트(MySQ에서는 백쿼트)로 둘러싼다
  • 시스템 허용길이 초과 불가
  • 객체이름은 객체가 담고있는 정보에 대한 명확한 표현이 가능한 이름으로 선택

1. DB 객체란

2. DDL(Data Definition Lanaguage)

  • Table(DB객체) 생성/수정/삭제
  • DDL은 Schema 내의 객체를 정의하고 관리할 때 사용되는 쿼리문 (DDL <--- Definition)
  • 대표적으로 CADTR이 있습니다
    - Creat, Alter, Drop, Truncate, Rename
  • 데이터를 구성하는 논리적인 구조(객체 ex.DB, Table)를 추가/수정/삭제할 수 있습니다
  • 추가로, 메타데이터(데이터에 대한 데이터)를 다루는 것이 가능합니다

DDL 문법

0. DB(Schema) 생성

[문법]
CREATE DATABASE DB명; <-- #DB 생성
SHOW DATABASES; <-- #DB list 반환

1. TABLE

1-0) 생성

** **는 개인 alert를 위한 표시이므로, 없는 것으로 간주하면 됩니다.

[문법] CREATE TABLE 테이블명 (칼럼명/ 자료형/ 제약조건);

mysql> CREATE TABLE users (
	id / VARCHAR() / NOT NULL / AUTO_INCREMENT,
    name / VARCHAR() / NOT NULL,
    email / VARCHAR() / NOT NULL,
    profile_image / **VARCHAR()** / NULL,
    password / VARCHAR() / NOT NULL,
    created_at / TIMESTAMP / NOT NULL / **DEFAULT NOW()**,
    updated_at / TIMESTAMP / NULL / **ON UPDATE** **CURRENT_TIMESTAMP**,
    PRIMARY KEY (id)
);
mysql> CREATE TABLE posts (
	id / **int** / NOT NULL / **AUTO_INCREMENT**,
	title / VARCHAR() / NOT NULL
    user_id / **INT** / NOT NULL
    created_at / **TIMESTAMP** / NOT NULL / **DEFAULT** **CURRENT_TIMESTAMP**
    updated_at / TIMESTAMP / NULL / **ON UPDATE** CURRENT_TIMESTAMP,
    PRIMARY KEY(id),
    **CONSTRAINT** posts_user_id **fkey** **FOREIGN KEY** (user_id) **REFERENCES** user(id)
);

#Description을 축약해놓은 명령어로써, 테이블의 정보를 보여줍니다.

mysql> DESC users; <-- #잘 반영되었는지 확인

테이블간 1:N 관계 ---> user_id 칼럼이 TABLE users의 PK값을 참조하도록, FK 제약조건을 걸어둔 것을 확인할 수 있습니다.

1-1. TABLE 수정 (미완)

- 서비스를 이용하는 사용자들의 나이에 따라서 게시글을 추천해주는 기능이 필요
- 더이상 PROFILE_IMAGE 열(column)이 필요하지 않음
- posts 테이블에서 사용중이던 content의 저장공간 부족으로 추가 공간확보 필요

열(column) 추가

[문법] ALTER TABLE 테이블명 (행위(ADD)/ 열 이름/ 자료형/ 제약조건);

열(column) 삭제

[문법] ALTER TABLE 테이블명 (행위(DROP)/ 열 이름/ 자료형/ 제약조건);

열(column) 수정

[문법] ALTER TABLE 테이블명 (행위(MODIFY)/ 열 이름/ 자료형/ 제약조건);

테이블(Table) 삭제

[문법] DROP TABLE 테이블명;
주의사항: DROP TABLE 명령을 사용하기 전 백업해놓는 습관이 필요합니다!

cf. 테이블(Table) 내부 데이터만 전부 삭제

[문법] TRUNCATE TABLE 테이블명;

  1. Summary

0개의 댓글