BE_[Database] MySQL and SQL_table 생성,수정,삭제_10.31

송철진·2022년 10월 30일
0

명령어 요약

  • CREATE DATABASE {database_name};
    👉 원하는 데이터베이스를 생성
  • SHOW DATABASES;
    👉 생성된 전체 데이터베이스를 확인
  • USE {database_name}
    👉 생성된 데이터베이스에 접근
  • CREATE TABLE {table_name} (field, field, field, constraint);
    👉 데이터베이스 내부에 테이블을 생성
  • SHOW TABLES;
    👉 생성된 전체 테이블을 확인
  • ALTER TABLE {table_name} MODIFY {column} {data structure} {constraint};
    👉 테이블의 구조를 변경
  • DROP TABLE {table_name};
    👉 테이블을 삭제
  • TRUNCATE TABLE {table_name};
    👉 테이블 객체 내의 모든 데이터(row)를 삭제

1. 정의와 규칙

관계형 데이터베이스(RDBMS, Relational Database Management System)에서는 데이터가 여러개의 2차원 테이블에 저장되고 관리된다

데이터베이스 객체(Database Object)
: 데이터베이스 내에 실체를 가지는 어떤 것
ex) 2차원 테이블(Table), 뷰(View), 인덱스(Index)

데이터베이스 객체 이름 규칙

  • 기존 이름이나 예약어와 중복X
  • 숫자로 시작X
  • 기호는 언더스코어(_)만 사용 ok
  • 한글은 더블쿼트(MySQL에서는 백쿼트)로 둘러싼다.
  • 시스템이 허용하는 길이를 초과하지 않는다.
  • 객체가 담고 있는 정보를 명확하게 표현할 수 있는 이름을 선택!

스키마(Schema)
: 데이터베이스 내의 객체(table, view, index)를 담는 컨테이너
: 스키마 안에는 테이블을 정의하고, 테이블 안에는 열을 정의한다

2. DDL (Data Definition Language)

: Schema 내의 객체를 정의하고 관리할 때 사용되는 쿼리문

  • 데이터를 구성하는 논리적인 구조(데이터베이스 또는 테이블)을 추가하고 수정하고 삭제 가능
  • 메타데이터(데이터에 대한 데이터)를 다루는 쿼리문

2-1. 스키마 생성

테이블 객체를 담을 수 있는 스키마를 생성합니다
mysql서버에 접속: mysql -u root -p
westagram 데이터베이스 생성하기: CREATE DATABASE westagram;
현재 저장된 데이터베이스 확인하기: SHOW DATABASES;

생성된 westagram 스키마에 접근: USE westagram;
westagram 스키마의 테이블을 확인하기:SHOW TABLES; 👉 (아직 비어있음)

2-2. 테이블 생성

목표: 테이블(users, posts) 구축하기

쿼리문은 세미콜론(;)으로 구분되므로 엔터를 쳐서 멀티라인을 작성할 수 있다!

  1. 사용자 테이블 생성
CREATE TABLE users 
(
  id INT NOT NULL AUTO_INCREMENT,                        
  name VARCHAR(50) NOT NULL,                             
  email VARCHAR(200) NOT NULL,
  profile_image VARCHAR(1000) NULL,    
  password VARCHAR(200) NOT NULL,
  created_at TIMESTAMP NOT NULL DEFAULT NOW(),           
  updated_at TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP, 
  PRIMARY KEY (id)                                       
);                                     

👉 설명:

no컬럼명자료형조건의미
1idINTNOT NULL AUTO_INCREMENT값을 자동증가
2nameVARCHAR(50)NOT NULL문자열(50bytes)
2emailVARCHAR(200)NOT NULL
3profile_imageVARCHAR(1000)NULL
4passwordVARCHAR(200)NOT NULL
5created_atTIMESTAMPNOT NULL DEFAULT NOW()생성시간 기록
6updated_atTIMESTAMPNULL ON UPDATE CURRENT_TIMESTAMP변경시간 기록

👉 설명:

no쿼리문설명
7PRIMARY KEY (id)Primary Key를 id 로 설정

  1. 게시글 테이블 생성
    어떤 사용자가 작성한 게시글인지 테이블 간에 부모 자식 관계를 지정(데이터의 정합성을 위함)하기 위해서 외부키(FOREIGN KEY) 제약 조건을 설정해줘야 합니다
CREATE TABLE posts
(
  id INT NOT NULL AUTO_INCREMENT,
  title VARCHAR(100) NOT NULL,
  content VARCHAR(2000) NULL,
  user_id INT NOT NULL,
  created_at TIMESTAMP NOT NULL DEFAULT NOW(),
  PRIMARY KEY (id),
  FOREIGN KEY (user_id) REFERENCES users (id) 
);

ex) MUL - 다수의 게시물(post)가 동일한 user_id를 가질 수 있기 때문

2-3. 테이블 변경

예)

  1. 열(column) 추가
    방법(작성 순서): ALTER TABLE + 테이블명 / 행위 / 열 이름 / 자료형 / 제약 조건
ALTER TABLE users ADD age INT NOT NULL;

  1. 열(column) 삭제
    방법(작성 순서): ALTER TABLE + 테이블명 / 행위 / 열 이름
ALTER TABLE users DROP profile_image;

  1. 열(column) 수정
    방법(작성 순서): ALTER TABLE + 테이블명 / 행위 / 열 이름 / 자료형 / 제약 조건
ALTER TABLE posts MODIFY content TEXT NULL;

CHANGE 명령을 통해서 열 이름도 변경
ALTER TABLE 테이블명 CHANGE 기존컬럼명 변경할컬럼명 데이터타입;

2-4. 테이블 삭제

테이블 삭제

DROP TABLE posts;

테이블 내 데이터만 삭제 👉 행row단위 삭제(양이 많으면 처리속도 느림)

DELETE FROM posts WHERE condition;

테이블 내 데이터만 삭제 👉 모든 행 삭제(양이 많을 때 처리 속도 빠름)

TRUNCATE TABLE posts;
profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글