Database

오태원·2024년 12월 9일

데이터베이스

  • 다양한 카테고리의 정보를 저장할 수 있는 구조
  • 여러사람에 의해 공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합
  • 데이터를 저장하는 구조/자료 모음

엑셀과 같은 프로그램과 다른이유 : 파일시스템 VS 데이터베이스

  • 파일시스템 : 엑셀 : 데이터를 기록하고 여러사람이 공유하여 사용 가능
    • 단점
      • 데이터 중복이 생길 수 있다.
      • 데이터 공유에 있어서 제한이 존재한다.
      • 구현과 유지보수에 시간이 오래걸린다.
      • EX ) 각 부서에서 관리하는 파일들이 다르면 바뀌는 정보를 서로 모르기에 주기적으로 최신화를 시켜주지 않으면 오류가 생길 수 밖에 없다.

  • DBMS : Data Base Management System
    • 개발자와 데이터베이스를 연결시켜주는 소프트웨어
    • 데이터베이스 사용자가 데이터베이스를 생성, 공유, 관리할 수 있도록 하는 역할
    • 파일시스템이 가진 문제를 해결하기 위해 만들어진 것
    • 데이터베이스에 접근하고 이를 관리하기 위해 존재한다.
    • 관계형 데이터베이스 : R(Relational)DBMS : DBMS에 관계가 추가된 것
      • oracle, SQL Server, DB2, MY SQL, PostgreSQL, SQLite

Database 용어

하나의 DBMS안에는 여러개의 Database가 올 수 있고, Database에는 여러개의 Table이 올 수 있다.데이터베이스 구조

  • 열 : Column, Attribute, 속성, 세로
  • 행 : Record, Tuple, 튜플, data한개, 가로
  • 테이블 : Table, Relation
    • 여러개의 테이블 있을수 있음
    • 그 테이블 끼리 관계를 가질수 있다.

key : 데이터베이스에서 튜플을 찾거나 순서대로 정렬할 때 구분하고 정렬의 기준이 되는 속성

  • 일반적으로 무언가를 식별하는 역할.
  • 기본키 : PK : Primary Key
    • 데이터를 구성하는 속성에서 유일하게 구분이 되면 기본키가 된다.
    • 기본키가 가능한 후보가 여러개면, 테이블 특성을 반영해서 하나를 선택.
      • NULL값 불가! : 데이터가 아예 없는 값 : 0은 null값이 아니다.
      • 중복값 불가!
      • 키 값이 변동되면 안된다.
      • 최대한 적은 수의 속성을 가진 것이어야 한다.
      • 테이블 내 튜플을 식별할 수 있는 고유한 값을 가져야 한다.
  • 외래키 : FK : Foreign Key
    • 어떤 테이블의 기본키를 참조하는 속성
    • 서로 관계를 맺은 테이블의 연결되는 속성
    • 여러개가 있어도 상관 없다.
    • 외래키기본키 양쪽 테이블 도메인 ( 속성이 가질 수 있는 값의 집합 )은 서로 같아야 한다.
    • NULL값, 중복값 허용됨.

  • 데이터베이스 구축 단계

    데이터베이스 생성 - 테이블 생성 - 데이터 입력, 수정, 삭제 - 데이터 조회

MySQL

점유율이 상당히 높다.
SQL : Structured Query Language

  • 구조적인 쿼리 언어
  • 비절차적 언어( 실행 순서가 없음 )
  • 데이터 정의어( DDL ), 데이터 조작어( DML ), 데이터 제어어( DCL )
    • DDL : table과 관련된 명령어
      • CREATE, ALTER, DROP : 테이블이나 관계의 구조를 생성하는데 사용하는 명령어
    • DML : 만들어진 table에서 튜플과 관련된 명령어
      • SELECT : 데이터를 조회하거나 검색하기 위한 명령어
      • INSERT, UPDATE, DELETE : 테이블의 데이터를 변경하는 명령어. 데이터 삽입, 수정, 삭제
    • DCL : database에 접근할수 있는 권한과 관련된 명령어
      • GRANT, REVOKE : 데이터베이스에 접근하고 데이터 사용 권한을 주거나 회수하는데 사용하는 명령어

윈도우 실행할 때에는

  • powershell이나 #cdm이면 mysql -u root -p를 입력해주면 되고
  • git bash의 경우 winmpty mysql -u root -p를 입력해주면 접속이 가능하다.

종료 할 때에는 quit만 적어주면 된다.
반드시 세미콜론 - ; 을 붙여주고 ctrl + enter을 눌러줘야 실행이 된다.


데이터 정의어 : DDL

CREATE문

  • 데이터베이스와 테이블을 생성, 기본키 외래키 정의
  • 데이터베이스 생성 + 한글 인코딩
    • CREATE DATABASE 이름 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf_general_ci ;
  • 테이블 생성
    • CREATE TABLE 테이블명 ( 속성이름1 데이터타입 PRIMARY KEY, 속성이름2 데이터타입, [ FOREIGN KEY 속성이름 REFERENCES 테이블이름 ( 속성이름 ) ] ) ;
  • 데이터 타입 : 숫자형

    • INT : INTIGER : 정수

  • 데이터 타입 : 문자형

    • CHAR(N), VARCHAR(N) : 간단한 이름정도 : N에는 바이트 제한을 줄 수있는 숫자가 들어간다.
      • CHAR(N)는 N에 들어가는 숫자만큼 바이트가 형성이된다.
        EX) N에 10들어가면 데이터가 3바이트만 들어와도 총 크기는 10바이트.
      • VARCHAR(N)는 N에 적은 숫자만큼 크기가 형성되는 것이 아니고, 들어가 있는 데이터 만큼만 형성이된다.
        EX) N에 10들어갔는데 3바이트만 들어오면 총 크기는 3바이트.
    • TEXT, MEDIUM TEXT는 좀 큰 데이터를 받을 때 사용한다.

  • 데이터 타입 : 날짜형

    • DATE : 3바이트 : 날짜저장 ( YYYY-MM-DD 형식 )
    • TIME : 3바이트 : 시간저장 ( HH : MM : SS 형식 )
    • DATETIME : 8바이트 : 날짜와 시간 저장 ( YYYY-MM-DD HH : MM : SS 형식 )

ALTER문

생성된 테이블의 속성과 속성에 대한 제약 및 기본키, 외래키를 변경

  • ALTER TABLE 테이블명 ADD 속성이름 데이터타입; --- 새로운 속성 추가하는 경우
  • ALTER TABLE 테이블명 DROP COULMN 속성이름; --- 기존 속성 삭제하는 경우
  • ALTER TABLE 테이블명 MODIFY 속성이름 데이터타입; --- 기존 속성 수정하는 경우

DROP문

생성된 TABLE 삭제 : 테이블 구조와 데이터 모두 삭제되므로 주의

  • DROP TABLE 테이블이름 ;

데이터 조작어 : DML

DML : Data Mainpulation Language
데이터베이스의 내부데이터를 관리하기 위한 언어

  • INSERT : 테이블에 데이터를 추가하는 역할 : C
  • SELECT : 데이터베이스에서 데이터를 조회하는 역할 : R
  • UPDATE : 테이블에서 데이터를 수정하는 역할 : U
  • DELETE : 테이블에서 데이터를 삭제하는 역할 : D

CRUD : 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 처리기능

INSERT문

  • 테이블에 새로운 튜플 추가
  • INSERT INTO 테이블명 ( 필드1, 필드2, 필드3,.. ) VALUES ( 값1, 값2, 값3,.. ) ;
    • 필드 : 자신이 정해준 속성의 이름
    • 필드를 건너뛰고 싶으면 VALUES의 값에 순서대로 입력해주면 된다.

UPDATE문

  • 테이블에서 특정 속성 값 수정
  • UPDATE 테이블명 SET 필드1 = 값1 WHERE 필드2 = 조건2 ;
    • 테이블명 : products이름
    • SET : ( 수정 할 ) data 입력
    • WHERE : ( 수정 될 ) 특정 data를 찾는 구문

DELETE문

  • 테이블의 기존 튜플을 삭제
  • DELETE FROM 테이블명 WHERE 필드 1 = 값 1 ;
    • 전부 다 삭제 할 것이 아니라면, WHERE에 조건을 적으면 된다.
  • DROP vs TRUNCATE
    • DROP : 테이블 전체를 삭제
    • TRUNCATE : 테이블 초기화 // 테이블의 행 ( row ) 일괄 삭제 : DELETE와 비슷

SELECT문

  • 데이터를 검색하는 기본 문장, 질의어 ( query )라고도 함

  • SELECT 속성이름, ... FROM 테이블 이름 [ WHRER 검색조건 ]

    • 어떠한 테이블에서 어떠한 속성을 가지고 올 것인지를 정한다.
    • WHERE을 안쓰게되면 테이블 전체를 불러온다.

  • WHERE - 여러가지 연산자

    • =, >, <, >=, <= 등 사용 가능
    • 부정 연산자 : !=, ^=, <> : 같지않다. // NOT 컬럼명= : ~와 같지않다.

  • WHERE - 범위 집합, 패턴, NULL

    • BETWEEN a AND b : a 와 b의 값 사이에 있으면 참 ( a와 b값도 포함)
    • IN ( list ) : 리스트에 있는 값중에서 어느 하나라도 일치하면 참 : IN ( A, F ) 이면 A와 F를 가지고 있는 것들을 전부 불러온다.
    • LIKE ' 비교문자열 ' : 문자열의 패턴을 검사
      • 와일드 문자 종류
      • % : 0개 이상의 어떤 문자 // LIKE "서울%" > 서울, 서울시, 서울특별시 다 됨.
      • _ : 1개의 단일 문자 // LIKE "서울_" > 서울시 만 됨.
    • IS NULL : NULL인 값만 가져옴 NULL이면 true, 아니면 false
      - IS NOT NULL 가능 : NULL이 아닌 것만 가져옴

  • WHERE - 복합 조건

    • AND : 앞에있는 조건과 뒤에 오는 조건이 참이 되면 결과도 참
    • OR : 앞에 있는 조건과 뒤에 오는 조건 중 하나라도 참이면 결과는 참
    • NOT : 뒤에 오는 조건과 반대되는 결과를 돌려줌
  • ORDER BY

    • 결과가 출력되는 순서 조절
    • WHERE 절 뒤에나와야 함
    • ASC : ASCENDING, 오름차순 ( 기본값 )
    • DESC : DESCENDING, 내림차순
    • SELECT 속성이름,... FROM 테이블이름 [ WHERE 검색조건] [ ORDER BY 속성이름 ASC or DESC ]
  • DISTINCT

    • 중복된 데이터 제거
    • SELECT [ DISTINCT ] 속성이름,... FROM 테이블이름 [ WHERE 검색조건 ] ORDER BY 속성이름 ]
  • LIMIT

    • 출력 개수 제한
    • SELECT [ DISTINCT ] 속성이름,... FROM 테이블이름 [ WHERE 검색조건 ][ ORDER BY 속성이름 ] [ LIMIT 개수 ]

0개의 댓글