오늘부터 MySQL과 알고리즘(파이썬)을 본격적으로 시작했다.
MySQL의 기초개념인 데이터베이스와 데이터정의어, 데이터조작어에대해 공부했고
기존에 공부했었던 파이썬으로 스택구현을 복습했다.
파이썬으로 스택구현하기
데이터베이스
관리하는 데이터들을 목적에 맞게 저장소에 모아둔것
- 정형데이터 : 미리 정해진 구조에따라 저장된 데이터
- 반정형 데이터 : 구조에따라 저장됬지만 구조에 대한 설명이 되어있는 데이터
- 비정형 데이터 : 정해진 구조 없이 저장된 데이터
데이터베이스 특징
- 사용자 지속성 : 사용자의 요청에 즉시 처리하고 요청가능
- 지속적인 변화 : 새로운 데이터의 최신상태를 유지 (일관성 유지)
- 동시 공유 : 다수의 사용자가 동시에 같은 데이터를 이용 (동시성 제어 가능)
- 내용에 대한 참조 : 데이터베이스에서 데이터의 주소나 위치가 아닌 사용자가 요구하는 내용으로 데이터를 찾을 수 있음
- 데이터의 장애 발생시 회복가능하며 권한에 따른 접근영역을 설정하여 보안향상
RDBMS (관계형 데이터베이스 관리시스템)
관계형 데이터베이스를 생성, 수정할 수 있는 소프트웨어로 사용자와 DB간의 연결기능을 한다.
- 관계형 데이터베이스 (RDB)
- MySQL, Maria DB, Oracle
- 2차원 테이블에 행 열로 구성된 데이터를 정의하고 설명하는 모델
- 구조화된 데이터는 SQL을 통해 조회 가능
- 일관성, 안정적, 신뢰성
- 비관계형 데이터베이스
- Mongo DB, redis
- 데이터가 행 열로 구조회되지 않고, 하나의 데이터를 하나의 문서로 표현
- 분산확장이 가능해 대용량 데이터 처리에 용이
테이블
- 관계형 데이터베이스에서 자료의 구조를 2차원의 표로 나타낸것
- 행, 열의 형태로 구성/관리
- 행(로우) : 레코드, 튜플
- 열(컬럼) : 어트리뷰트, 피처
- 키를 지정함으로써 원하는 자료를 쉽게 찾아낼 수 있음
스키마
- 테이블 뼈대를 구성하는것
- 테이블을 정의할 때 컬럼별 저장할 데이터 타입까지 명시해야함
- 테이블에는 숫자 또는 문자열같은 특정 데이터 유형이 담긴 여러 열이 포함 됨
데이터타입
정수타입
- INT는 정수를 나타내며 각 정수 타입에따라 요구되는 저장공간과 표현가능한 최소,최대값이 달라짐
- 0, 음수 및 양수가 가능
- MySQL에서는 AUTO_INCREMENT로 자동정수값 설정이 가능
문자열타입
- CHAR, VARCHAR, TEXT, ENUM, SET 등이 있으며 각각 다른특징을 가지고 있음
날짜와 시간 데이터타입
- 주로 날짜와 시간 데이터를 저장하고 원하는 기준에따라 수정할 수 있음
- 하지만 꼭 필요한 상황이 아니라면 숫자가 아닌 알파벳형태로 저장
제약조건 (Constraint)
- 테이블에 제약조건을 걸어 원하는 형태로 조절 가능함
- 목적에 맞는 데이터만 입력받기위해 칼럼마다 규칙을 정함
- 조건에 맞지않는 데이터는 입력을 거부하고 에러 발생
- 보통 테이블 생성시 제약을 사용하며 일시적으로 활성화/비활성화가 가능
- PRIMARY KEY, FOREGIN KEY, NOT NULL, NULLABLE 등등 제약조건이 매우 중요한 경우가 많기 때문에 자주 쓰이는 제약조건을 알아두는것이 좋음
데이터 정의어 (DDL)
- 테이블이나 관계 구조를 생성하는데 사용
- CREATE : 생성
- ALTER : 수정 (실무에선 사용하지 않음)
- DROP : 이미 존재하는 테이블이나 데이터베이스 삭제
- TRUNCATE : 테이블 초기화, 테이블 행 지움(테이블은 유지)
데이터 조작어 (DML)
- 데이터 값에대한 조회,추가,삭제에 사용
- SELECT : 칼럼조회
- INSERT : 테이블에 행 삽입
- UPDATE : 테이블의 컬럼 값 수정 (행의 내용)
- DELETE : 테이블에 행 삭제
SELECT FROM WHERE
SELECT 컬럼명 FROM 테이블명 WHERE 조건절 의 기본형태를 유지
조건절에 다양한 연산자를 사용하여 데이터 선택 가능
- 비교연산자 : WHERE 절에 사용되는 조건중 하나로 데이터 선택에 유용
- WHERE 컬럼명 = 데이터값 : 데이터와 같은 칼럼 선택
- 단 = 는 비교대상의 대소문자 구별을 하지 않음을 주의
- WHERE BINARY 컬럼명 = 데이터값 형태로 대소문자도 구분 할 수 있음
- WHERE 칼럼명 !- 데이터랎 : 특정 데이터를 제외하고 선택
- WHERE 칼럼명 > < >= <= 데이터값 : 데이터값보다 크고작은 칼럼 선택
- 논리연산자 : 여러조건을 적용하거나 후에 조건을 더 추가할때 효과적
- WHERE a AND b : a,b 모두 TRUE 값만 추출
- WHERE a OR b : a,b 둘 중 하나만 TRUE 라도 추출
- WHERE 칼럼명 LIKE 데이터값 : 조건이 명확하지 않을 때 특정 내용을 찾음
- 이때 임의의 문자나 문자열을 대체하기위한 Wildcard(%,_)를 사용
- % : 조건을 포함하는 모든 문자
- _ : 한글자
- 특수기호 자체를 조회하려면 역슬레시\ 다음 기호 사용
- WHERE 칼럼명 BETWEEN A and B : A와B 사이에 값이 존재하는 행을 출력할때 사용
- 주로 날짜 사이에 간격을 주거나, 최소값과 최대값을 지정한 값의 범위 내에 있는 값을 검색하기 위해 사용
- WHERE 칼럼명 IS NULL/ NOT NULL : NULL, NOT NULL 인 경우 추출
- WHERE 칼럼명 IN 데이터값 : 조회하려는 값이 여러개일경우 사용
- 데이터값을 여러개의 list로 설정이 가능
- WHERE author IN ("봉", "상") : 작가가 봉,상 중 하나면 선택
- IN 대신 NOT IN 으로 아닌경우만 선택할 수 있음
- 산술 연산자 : 데이터값 계산시 사용
- MySQL에서는 문자열에 산술연산자를 사용하면 숫자값으로 변경되어 추출됨을 주의(오류 자주발생)
- AS : 임시로 칼럼명을 변경 ( 기존의 칼럼명이 실제로 변경되지 않음을 주의)
- 컬럼명 바로 뒤에 작성하며 특수문자,대소문자,공백을 사용하려면 따옴표로 묶어야한다
- 열 이름 뿐 아니라 테이블 이름에도 붙일 수 있음
- ex) SELECT name AS bookname FROM member.bookstore AS BS
- ORDER BY 칼럼명 : 오름차순, 내림차순으로 정렬된 데이터가 필요할 때 사용
- 내림차순 DESC, 오름차순 ASC(default)
- ORDER BY 는 가장 마지막에 실행되므로 쿼리문중 가장 끝에 사용가능
- 칼럼명 뿐 아니라 Alias로도 적용 가능
- DISTINCT 칼럼명 : 중복제거를 위한 키워드로 출력에서 고유한 값을 반환
- ex) SELECT DISTINCT 칼럼명 : 칼럼명이 중복되는경우는 제외하고 선택
- 칼럼 여러개를 선택할 수 있음