관계형 데이터베이스를 하드웨어(SSD - 영구저장)에 저장하는 것을 도와주는 소프트웨어
ERD를 잘 작성했는지 확인해보려면 테스트 데이터를 넣어보면 된다.
dbmate는 데이터는 관리하지 않고, 테이블 형상만 관리합니다.
데이터 관리하는 툴은 따로 없고, dump해서 백업해놓고 필요하면 불러들인다
Structured Query Language (SQL)
테이블 생성/수정/삭제
목적: 웹 서비스에 필요한 데이터를 체계적으로 저장
방법: 정규화된 2차원 테이블을 작성해서 구축해나가는 과정
스키마 설계가 끝난 이후, 실제 물리적인 서버에서 RDBMS 소프트웨어(ex. MySQL)를 설치하고 DB를 구축합니다.
DB 객체에는 Table, View, Index, Procedure 등이 있습니다.
DB 객체 명명규칙
- DDL은 Schema 내의 객체를 정의하고 관리할 때 사용되는 쿼리문 (DDL <--- Definition)
- 대표적으로 CADTR이 있습니다
- Creat, Alter, Drop, Truncate, Rename- 데이터를 구성하는 논리적인 구조(객체 ex.DB, Table)를 추가/수정/삭제할 수 있습니다
- 추가로, 메타데이터(데이터에 대한 데이터)를 다루는 것이 가능합니다
[문법]
CREATE DATABASE DB명; <-- #DB 생성
SHOW DATABASES; <-- #DB list 반환
** **는 개인 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 제약조건을 걸어둔 것을 확인할 수 있습니다.
- 서비스를 이용하는 사용자들의 나이에 따라서 게시글을 추천해주는 기능이 필요
- 더이상 PROFILE_IMAGE 열(column)이 필요하지 않음
- posts 테이블에서 사용중이던 content의 저장공간 부족으로 추가 공간확보 필요
[문법] ALTER TABLE 테이블명 (행위(ADD)/ 열 이름/ 자료형/ 제약조건);
[문법] ALTER TABLE 테이블명 (행위(DROP)/ 열 이름/ 자료형/ 제약조건);
[문법] ALTER TABLE 테이블명 (행위(MODIFY)/ 열 이름/ 자료형/ 제약조건);
[문법] DROP TABLE 테이블명;
주의사항: DROP TABLE 명령을 사용하기 전 백업해놓는 습관이 필요합니다!
[문법] TRUNCATE TABLE 테이블명;