Database 복습 (1)

dosiri_·2021년 9월 15일
0

복습

목록 보기
5/14
post-thumbnail

0914

또 복습이 밀렸다 :(
점심을 먹고 체했는지 오후 수업 내내 머리아프고 그래서 끝나고 바로 자버렸다..

얼른 끝내고 오늘 배운 내용도 정리해보자

1. 테이블 구성

  • row ( record , tuple )
  • column ( field, attribute )

2. Index ( 색인 )

  • RDBMS에서 검색 속도를 향상시키기 위해 사용한다.

  • Table 의 column을 색인화( 따로 파일로 저장 ) 하여 검색 시 해당 Table의 record를 전부 스캔하는 것이 아닌 색인화되어있는 index파일을 검색한다!

  • B+트리 형태로 저장

  • 장점:
    1) 검색 / 정렬 속도 향상
    2) 질의나 보고에서 그룹화 작업의 속도 향상
    3) where 조건에 사용되는 컬럼을 인덱스에 사용
    4) 테이블 행의 고유성 강화
    5) 기본 키는 자동으로 인덱스가 된다

  • 단점:
    1) 인덱스된 필드에서 데이터를 업데이트, 레코드 추가/ 삭제 시 성능이 떨어진다
    2) 인덱스가 데이터베이스 공간을 차지해서 추가적인 공간이 필요하다.
    3) 인덱스를 생성하는데 시간 소요
    4) 데이터 변경이 자주 일어난다면 인덱스를 재작성해야하므로 성능에 영향
    5) 데이터 중복이 많은 컬럼은 인덱스를 만들어도 효과 미미

3. 데이터 처리 ( CRUD )

- 생성(Create) : Insert

	Insert into 테이블이름 ( col1, col2) values ( val1, val2 );
    -> column명은 생략 가능하지만 value에 적는 개수가 column 개수와 다르면 적어주어야!
    

- 조회(Read) : Select

기본조회

	Select 조회할 컬럼 이름들 from 조회할 테이블이름 where 조건;
	-> 전체 컬럼을 조회할 경우 조회할 컬럼 이름들 대신 * 표시
    

중복제거

    Select distinct 중복제거할 컬럼이름들 from 조회할 테이블이름 where 조건;

정렬

    Select 조회할 컬럼 이름들 from 조회할 테이블이름 where 조건 order by 정렬기준;

-> ASC(오름차순) , DESC(내림차순)

JOIN

Select * from a_table join b_table on a_table

	-> inner , left, right 등 다양한 조건들 있음

- 수정(Update) : Update

	Update 테이블이름 set col1=val1, col2=val2 where 조건;

- 삭제(Delete) : Delete

	Delete from 테이블이름 where 조건;

4. MySQL 및 workbench 설치

차근차근 하면 되는데 나는 이전에 설치해둔 것 지우고 새로 하려니 너무 복잡했다..

5. Table 용어

- Datatype : 정수, 실수, 가변길이문자열, 장문 문자열 등 선택가능
- PK: Primary Key (기본키) 설정 idx느낌
- AI (Auto Increasement) : 레코드 삽입 시 자동으로 값 증가
=> id값 따로 안써줘도 알아서 1증가해서 들어가짐
- NN (not Null): null 허용 안함 설정
- UQ (Unique) : 테이블에서 중복 값 허용 안함 설정
- BIN (Binary) : 이진 값으로 설정
- UN (Unsigned) : 부호 없는 양의 값으로 설정
- ZF (Zerofill) : 정수 들어오면 앞에 0 채움 설정
- G (Generated) : 가상 컬럼으로 설정
- Default : 값이 들어오지 않았을때 default값을 설정

6. Node Js와 MySQL 연동

1) createConnection

  • 1번에 1개의 connection 생성 후 DB와 연결
  • 하나의 쿼리를 실행. 쿼리 실행 중에 연결을 차단해서 다른 쿼리 실행 못하게함
  • connection을 매번 열고 닫아야 해서 실제로는 사용 빈도 낮다
  • connection.query(query, [values], callback);
    • query : 쿼리문이 STRING 형식으로 들어간다!
      변수 자리에 ? 로 설정하여 런타임에 배정 or 백틱 문자열을 사용하여 쿼리문에 변수 배정
    • values : 쿼리문 안에 들어갈 변수들이 배열 형식[]으로 들어간다! 변수가 하나일때는 생략 가능
    • callback : select 문의 결과가 json 배열 형태로 들어온다
      ->> ex) [ obj1{}, obj2{}, obj3{} ]
      insert , update, delete는 에러처리만 한다.
    • connection.end() : 커넥션 종료

2) createPool

  • 여러개의 connection pool을 미리 만들어 놓고 거기서 connection 을 가져다가 쓴다
  • connection을 가져왔다가 반납하는 것 반복. 따라서 빠르다. but pool 내의 connection 개수 제한 있다!!
  • 쓰고 반환하지 않으면 connection limit에 걸릴 수 있음
  • 사용량이 적으면 메모리 낭비가 크다
  • connection.release();
    • connection 반환하는 메소드 => connection.query 콜백 메소드 안에서 해주어야!
    • 비동기 실행이므로 쿼리가 실행되기 전에 반납 될 수 있음!
    • 빼먹으면 connection이 쌓이고 쌓여서 통신 불가 (connection leak 현상)
    • 에러가 나도 꼭 반납하자!

0개의 댓글