Step by Step

MySQL 다루기 본문

카테고리 없음

MySQL 다루기

짤진이 2024. 4. 19. 16:40
반응형

Docker 설치하기

맥: https://docs.docker.com/desktop/install/mac-install/ 

윈도우즈: https://docs.docker.com/desktop/install/windows-install/ 

MySQL 설치하기

https://dev.mysql.com/downloads/workbench/

 

mysql client 설치 (Mac)

$> brew update

$> brew install mysql-client

$> mysql --version

 

Database(DB) vs DBMS

DB의 특징

  • 데이터베이스(DB): 데이터의 집합
  • DBMS(DataBase Management System)
    (Oracle, MySQL, MariaDB, PostgreSQL, SQLServer)

 

DBMS의 조건

DBMS의 특징

  • 데이터의 무결성(Integrity): 오류가 있으면 안됨!   cf. Constraint(제약 조건)
  • 데이터의 독립성: 크기, 위치, 저장소에 독립
  • DBMS Server 보안
  • 데이터 정규화: 데이터 중복의 최소화
  • 응용 프로그램 제작과 수정의 용의성
  • 데이터의 안전성 향상
    •  

 

 

 


DBMS의 분류

  • 분류: 계층형, 망형, 관계형, 객체 지향형, 객체 관계형, 도큐멘트형
  • 관계형 DBMS: 2차원 구조
  • 객체 지향형/관계형: 3차원 구조     cf. NoSQL, DB2, SQLite, Access, etc)
  • Instance, Schema(DB), Table(Entity), Collection, etc
  • Session, Connection, Grant, User, Privilege, etc

SQL (Structured Query Language)

SQL의 특징

  • DBMS 제작 벤더와 독립적
  • 다른 시스템과 호환(이식)
  • 표준이 존재하며, 계속해서 발전
    cf. StandardSQL vs PL/SQL(Oracle) vs T-SQL(SQLServer)
  • 대화식(Interpreter) 언어
  • 분산형 Client/Server Achitecture

docker-compose.yml 작성

version: '3.8'
services:
  localdb:
    container_name: shinhan3db
    image: mysql:8.0
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: TestdbRoot
      MYSQL_DATABASE: testdb
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./mysql:/var/lib/mysql

 

$> docker compose up -d

# down
$> docker-compose down

# 확인
$> docker ps

# cf. 시작
$> docker compose start

# 완전삭제: -volumne, -stop, -force
$> docker compose rm -vsf

Docker Container 생성

docker compose up -d => docker 생성

docker ps => 활동중인 docker 확인

mysql -u root -p -h 127.0.0.1 -P 3307 => 3307 포트로 접속

접속 후

show databases;

create database 할 때 주는 조건

command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci

* 이 조건이 없으면 create <database> 할 때 뒤에 조건이 붙음.

삭제 : drop database, 수정 : alter database

 

 

mysql> select * from mysql.user where User='dooo'\G;

 

ssh => was(익스프레스 같은거) => mysql

 

DB 생성/삭제 하기

mysql> create database <db-name>;

(주의) testdb는 docker 구동 시 자동으로 만들어 지므로 생성할 필요 없음!

mysql> use <db-name>;

# DB 삭제
mysql> drop database <db-name>;

 

# cf. current database
mysql> select database();

 

User + Host 생성하기

# User 생성
mysql> create user <user-name>@'<host>' identified by '<password>';
mysql> create user dooo@'%' identified by 'DoooUser!';
mysql> create user dooo@'211.234.55.66' identified by 'dooo!';
mysql> use mysql
mysql> select * from user; 
mysql> select * from user where User='dooo'\G;

# 권한 부여(모든 DB): 주의!
mysql> grant all privileges on *.* to '<user-name>'@'<host>';
mysql> grant all privileges on *.* to dooo@'%';

# 특정 DB 권한 부여
mysql> grant all privileges on <DB>.* to '<user-name>'@'<host>';
mysql> grant all privileges on testdb.* to 'dooo'@'%';

# 적용하기
mysql> flush privileges;

 

User + Host 생성하기 (Cont'd)

# 권한 확인
mysql> show grants for '<user-name>'@'<host>';
mysql> show grants for dooo@'%';
mysql> show grants for dooo;

# 권한 삭제(취소)
mysql> revoke all privileges on <db-name>.* from <user-name>@'<host>';
mysql> revoke all privileges on testdb.* from dooo@'%';

# User 삭제
mysql> drop user '<사용자>'@'<host>';
mysql> drop user dooo@'%';

# cf. current user
mysql> select current_user();

 

SQL 

DCL (Data Control Language)
- grant, revoke, deny

DDL (Data Definition Language)
- create, alter, drop, rename, truncate

DML (Data Manipulation Language)
- insert, select, update, delete

TCL (Transaction Control Language)
- begin transaction, commit, rollback, savepoint

 

unsigned는 양수 범위이므로 음수를 쓸 일이 없을 때는 무조건 unsigned를 붙여야 함 => 데이터를 2배 확보할 수 있기 때문.

 

Null과 undefined의 차이

Null

Null의 정식 명칭 Null Pointer

데이터가 하나도 없고 Null Pointer만 남아있는 경우

 

Undefined

undefined는 원시값(Primitive Type)으로, 선언한 후에 값을 할당하지 않은 변수나 값이 주어지지 않은 인수에 자동으로 할당된다. 이 값은 전역 객체의 속성 중 하나로, 전역 스코프에서의 변수이기도 하다. 따라서 undefined 변수의 초기 값은 undefined 원시 값이다.

 

 

 

반응형