데이터베이스(Database)

김유정·2023년 11월 15일

데이터베이스

목록 보기
1/6
post-thumbnail

서버와 데이터베이스의 통신

데이터베이스(Database: DB)

  • 데이터를 저장하는 저장소

데이터베이스의 종류
1) Relation DB(RDB)
관계형 데이터베이스

  • 행과 열로 구성된 테이블 형태
  • 테이블 형태를 정의/설계(Scheme)하고 그 형태에 맞게 데이터를 저장한다.
  • 외부, 개념, 내부 스키마
  • 여러 테이블이 서로 관계가 있는 구조일 수 있다.
대표적인 RDB의 예
- MySQL
- Oracle DB
- Maria DB

2) No SQL
관계형 데이터베이스가 아닌 SQL

  • No SQL (Non Sql 또는 Not Only SQL)
  • 설계를 변경하지 않아도 동적으로 속성을 추가 가능
  • 테이블 간의 연결을 통한 조회 불가
  • 속도가 빠름
  • 서버를 클라우드 형태로 구성한다.
대표적인 No SQL의 예
- Mongo DB: 데이터를 key-value의 쌍으로 저장. JSON과 같은 형태.
- Redis
- Hadoop
- Hbase

테이블의 스키마 정의

CREATE TABLE `lectureList` (
    `id` int NOT NULL AUTO_INCREMENT primary key,
    `lectureId` int NOT NULL,
    `order` int NULL DEFAULT 0,
    `subject` varchar(255) NOT NULL,
    `userId` int NOT NULL,
    `author` char(20) NOT NULL,
    `md` text,                        /* NULL 가능 */
    `onlyMaterial` boolean NOT NULL,
    `createdAt` timestamp DEFAULT CURRENT_TIMESTAMP,
    `updatedAt` timestamp DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

테이블 생성문 용어 정리
1) AUTO_INCREMENT

  • row의 primary key를 만드는데 주로 사용된다.(행의 번호)
  • row가 추가될 때마다 1씩 증가하는 수가 자동으로 저장된다.
  • 맨 아래 영역에 AUTO_INCREMENT의 시작값을 지정할 수 있다. AUTO_INCREMENT=10

2) primary key

  • row의 주요(primary) key로 설정한다.
  • 유일한 값을 갖는다.(중복값이 들어가면 에러 발생)
  • primary key로 조회할 때 속도가 빠르다.

3) DEFAULT ...

  • row를 추가하면서 값을 지정하지 않았을 때, 기본값으로 무슨 값이 들어갈지 설정

4) ENGINE(Storage Engine)
대표적인 스토리지 엔진으로 InnoDB, MyISAM 등이 있다.

  • 동시성 제어나 데이터베이스의 내부 구조 제어를 담당
  • MySQL 5.5 부터 기본 엔진이 InnoDB로 변경되었다.

5) CHARSET

  • 문자열 set의 종류
  • utf8mb4로 설정 시 이모지(emoji)가 저장될 수 있다.

테이블 삭제하기
drop table 테이블명;

테이블 수정하기

  • 테이블명 변경
    ALTER TABLE 테이블명 RENAME 변경할 테이블명;
  • 컬럼추가
    ALTER TABLE 테이블명 ADD COLUMN 추가할 컬럼명 varchar(16) NULL;
  • 컬럼 타입 수정
    ALTER TABLE 테이블명 MODIFY COLUMN 타입 수정할 컬럼명 varchar(32) NULL;
  • 컬럼명과 타입 수정
    ALTER TABLE 테이블명 CHANGE COLUMN 이전컬럼명 변경할컬럼명 varchar(16);

자주 쓰는 MySQL 자료형(Data Type) 종류

-- 한 줄 주석
# 한 줄 주석
/*
	여러줄 
    주석
*/

-- 사람 정보 저장 테이블
-- 번호(key라고 부름) | 이름 | 생년월일 | 취미 | 자기소개(없을 수 있다) | 작성 시간 | 수정 시간
-- 백틱 ` 백틱으로 갈색이 되도록 테이블명을 묶어야함 주황색이 되면 안됨'' 랑 다름 ``
-- 테이블명이나 컬럼명은 백틱으로 넣는다
-- 행 레코드 | 열 컬럼 필드
-- 필수 값일 때 not null
create table `person` (
	`id` int not null auto_increment primary key 
    , `name` varchar(10) not null
    , `birth` int not null
    , `hobby` varchar(100) not null
    , `introduce` text null -- null을 안 붙이면 기본 값은 null 허용
    , `createdAt` timestamp default current_timestamp
    , `updatedAt` timestamp default current_timestamp
) ENGINE=InnoDB default charset=utf8mb4;

# 스키마 정보 보기
desc `person`;
desc `user`;

-- 테이블 삭제하기
drop table `person`;

-- 테이블 수정하기
# 1) 테이블 이름 변경
alter table `person` rename `user`;

# 2) email 컬럼(필드) 추가 - 데이터가 존재할 때 나중에 추가되는 컬럼은 null이 반드시 허용되어야한다.
alter table `user` add column `email` varchar(16) null after `hobby`;

# 3) email 컬럼(필드) 수정 - 16에서 32로 변경
alter table `user` modify column `email` varchar(32) null;

# 4) 컬럼 이름/자료형 수정: birth(int) -> yyyymmdd(varchar)
alter table `user` change column `birth` `yyyymmdd` varchar(16);

-- not null로 바꾸고 char로 고정되어 있는 문자 8자로 변경
alter table `user` modify column `yyyymmdd` char(8) not null;

profile
열심히 하자

0개의 댓글