data engineering basic(SQL Basic)

SQL(Structured Query Language)

DB (Database)

  • 데이터를 통합하여 관리하는 데이터의 집합

DBMS (Database Management system)

  • DB를 관리하는 미들웨어 시스템을 의미

Database 분류

RDBMS(Relational Database Management System) NoSQL
- 데이터 테이블 사이에 키값으로 관계를 가지고 있는 데이터베이스 ex) Oracle, Mysql, Postgresql, Sqlite -데이터 사이의관계 설정으로 최적화된 스키마를 설계 가능 - 데이터 테이블 사이에 관계가 없이 저장하는 데이터베이스 - 데이터 사이의 관계가 없으므로 복잡성이 줄고 많은 데이터를 저장 가능

RDBMS

RDBMS

  • table

    • 행(row)과 열(column)로 이루어져 있는 데이터 베이스를 이루는 기본 단위
    • Storage Engine
      • MyISAM : full text index 지원, table 단위 lock, select가 빠름, 구조 단순
      • InnoDB : transaction 지원, row 단위 lock, 자원을 많이 사용, 구조 복잡
  • Column

    • 테이블의 세로축 데이터
    • Field, Attribute 라고도 불림
  • Row

    • 테이블의 가로축 데이터
    • Tuple, Recode 라고도 불림
  • Value

    • 행(row)과 열(column)에 포함되어있는 데이터
  • Key

    • 행(row)의 식별자로 사용
  • Relationship
    relationship

  • Schema

    • 스키마(schema)는 데이터 베이스의 구조를 만드는 디자인
      Schema

NoSQL

  • NoSQL(Not Only SQL)
    • RDBMS의 의존적인 관계가 갖는 한계를 극복하기 위해 만들어진 데이터베이스
    • 확장성이 좋음
      • 데이터 분산처리 용이
    • 데이터 저장이 유연함
      • RDMBS와 다르게 구조의 변경이 불필요
    • Schema 및 Join이 없음
      • Join 기능이 없으므로 각각의 테이블만 사용가능
      • collection 별로 관계가 없기 때문에 모든 데이터가 들어있어야 하므로 RDBMS보다 저장공간이 더 필요
      • 저장되는 데이터는 Key-value 형태의 JSON 포멧을 사용
    • select는 RDBMS보다 느리지만 insert가 빨라 대용량 데이터 베이스에 많이 사용
    • 트랜젝션(transaction)이 지원되지 않음(동시수정에 대한 신뢰성이 지원되지 않음)

NoSQL

DB 순위
https://db-engines.com/en/ranking_trend

Install MySQL(for Mac OS)

  • 주의) 2가지 방법을 소개하지만, Python에서 MySQL을 활용할 User들에게는 1번 방법으로 설치를 해야한다는 것을 알려드립니다!!!
  • brew(1번방법)로 설치해야 python의 mysql client를 사용할수 있습니다.

방법 1)

Install

1
2
3
4
5
$ brew install mysql@version_num
$ brew tap homebrew/services $ brew services start mysql@version_num
$ brew services list
$ brew link mysql@version_num --force
$ mysql -V

앞으로 SQL 접속시 사용할 Password!!

1
$ mysqladmin -u root password 'yourpassword'

Connect mysql server

1
$ mysql -u root -p

방법 2) dmg 파일 받아서 install

MySQL installer

  • step 3) 시스템 환경설정에 가면 MySQL이 설치 된것을 확인

MySQL 서버의 인스턴스를 정지 및 실행, 초기화, 제거등을 할수 있다.

  • Start MySQL Server 버튼을 클릭하여 실행

아래의 경로로 이동

1
$ cd /usr/local/mysql/bin

Mysql 서버에 접속

1
$ sudo ./mysql -p

Password: (관리자 권한으로 실행을 위한 PC의 패스워드)

Enter password: (임시로 발급받은 DB의 패스워드 입력)

  • 아래의 mysql 프롬프트가 나오면 정상!! 설치 완료!!
    1
    mysql>

패스워드 변경 ( qwer1234 로 변경할 경우 )

1
2
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'qwer1234';
mysql> FLUSH PRIVILEGES; mysql> quit;

변경한 패스워드로 다시 로그인

Mysql Basic Command

system

1
2
3
4
5
6
7
8
9
10
11
12
13
# mysql명령어 리스트 확인
mysql> help

# 현재 상태 보기
mysql> status

# mysql 접속 종료
mysql> exit
mysql> quit

# 패스워드 변경 ( qwer1234 로 변경하는 경우 )
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'qwer1234'
2.2 Database

Database

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# DB 목록 보기
mysql> show databases;

# DB 만들기 ( DB이름을 test라고 하려면 )
mysql> create database test;

# DB 접속하기 ( DB 이름 test )
mysql> use test;

# 현재 접속중인 DB 확인하기
mysql> select database();

# DB 지우기
mysql> drop database test;

# DB 삭제 확인
mysql> show databases;

Table

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 테이블 만들기
# 문자열 name 20자, age 숫자 3자 컬럼이 있는 테이블이 생성
mysql> create table user ( name char(20), age int(3) );

# 테이블 목록 확인
mysql> show tables;

# 테이블 구조 확인
mysql> desc user;
mysql> describe user;
mysql> explain user;

# 테이블 이름 바꾸기(another로 바꾸기)
mysql> rename table user to another;


# 테이블 이름 바뀐것 확인 mysql> show tables;
# 테이블에 데이터 추가하기
mysql> insert into another(name, age) values("alice", 23);
mysql> insert into another(name, age) values("peter", 30);

# 추가된 데이터 확인하기
mysql> select * from anther;

# 테이블 지우기
mysql> drop table anther;

# 테이블 삭제된것 확인
mysql> show tables;

Database Management Application for Mac OS

step 1) Install Sequel Pro

step 2) Connect Database Server

  • 아래와 같이 Host, Username, Password를 설정하여 연결
    Connection_DB_Server

Sample Database Download

  • https://dev.mysql.com/doc/index-other.html링크에서 Sample database 를 다운
    • 혹시라도 앞으로 저의 블로그를 보시면서 따라해보실 분들은 world database, sakila database 를 다운받아 주세요.

example_db

  • sql 파일 추가
    1
    2
    3
    4
    /usr/local/mysql/bin 디렉토리에서 아래와 같이 실행하면 sql 파일을 import - import 하기 전에 world 데이터 베이스가 있어야 함
    $ sudo ./mysql -p world < (sql 파일 경로)
    - brew로 설치한 경우 아래와 같이 추가
    $ mysql -u root -p world < (sql 파일 경로)