데이터베이스, DBMS
1. 데이터베이스
1) 데이터베이스란?
- 데이터의 집합이자 데이터의 저장공간
- 데이터 집합 : 데이터 베이스를 관리 및 운영하는 역할
- 데이터 저장공간 : 자료가 저장되는 디스크 공간(물리적 공간)

2) 데이터베이스의 정의
- 통합된 데이터 : 자료의 중복을 배제한 데이터의 모임이다.
- 저장된 데이터 : 컴퓨터가 접근할 수 있는 저장 매체에 저장된 자료이다.
- 운영데이터 : 조직의 고유한 업무를 수행하는 데 존재 가치가 확실하고 없어서는 안될 반드시 필요한 자료이다.
- 공용데이터 : 여러 응용 시스템들이 공동으로 소유하고 유지하는 자료이다.
3) 데이터베이스 특징
- 실시간 접근성 : 수시적이고 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 한다.
- 계속적인 변화 : 데이터베이스의 상태는 동적이다. 즉 새로운 데이터의 삽입, 삭제, 갱신으로 항상 최신의
데이터를 유지해야 한다.
- 동시공용 : 데이터베이스는 서로 다른 목적을 가진 여러 응용자들을 위한것이므로 다수의 다용자가
동시에 같은 내용의 데이터를 이용할 수 있어야 한다.
- 내용에 의한 참조 : 데이터베이스에 있는 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아니라,
사용자가 요구하는 데이터 내용으로 데이터를 찾는다.
4) 데이터베이스 키워드

2. DBMS
1) DBMS의 정의 : 데이터베이스를 관리하며 응용 프로그램들이 데이터베이스를 공유하며 사용할 수 있는
환경을 제공하는 소프트웨어
2) DBMS의 종류

3) DBMS의 데이터 구성

4) DBMS 필수기능
- 정의 기능 : 모든 응용프로그램들이요구하는 데이터 구조를 지원하기 위해 데이터 베이스에 저장될 데이터의
형(Type)과 구조에 대한 정의, 이용 방식, 제약 조건 등을 명시하는 기능
- 조작 기능 : 데이터 검색, 갱신, 삽입, 삭제 등을 체계적으로 처리하기 위해 사용자와 데이터베이스 사이의
인터페이스 수단을 제공하는 기능
- 제어 기능
1. 데이터베이스를 접근하는 갱신, 삽입, 삭제 작업이 정확하게 수행되어 데이터의 무결성이 유지
2. 정당한 사용자가 허가된 데이터만 접근할 수 있도록 보안을 유지하고 권한을 검사
3. 여러 사용자가 데이터베이스를 동시에 접근하여 데이터를 처리할 때 처리결과가 항상 정확성을 유지하도록
병행제어를 할 수 있어야 한다.
48. SQL
1) SQL이란?
- 관계형 데이터 베이스 관리시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어
- 종류 : DDL(데이터 정의어), DML(데이터 조작어), DCL(데이터 제어어)

2) SQL - DDL
- 데이터를 담는 그릇을 정의하는 언어
- 관계형 데이터베이스의 구조 정의
▶ CREATE : 데이터 베이스 오브젝트(구조, 객체)를 생성
▶ ALTER : 데이터 오브젝트를 변경
▶ DROP : 데이터 오브젝트를 삭제
▶ TRUNCATE : 데이터 오브젝트 내용 삭제(오브젝트를 DROP하고 다시 CREATE 한다)
3) SQL - DML
- 데이터의 생명주기를 제어하는 언어
▶ INSERT : 테이블의 신규 내용을 삽입(CREATE)
▶ SELECT : 테이블의 내용을 조회(READ)
▶ UPDATE : 테이블의 내용을 변경(UPDATE)
▶ DELETE : 테이블의 내용을 삭제(DELETE)
4) SQL - DCL
- 데이터에 대한 엑세스를 제어하는 언어
▶ GRANT : 데이터베이스 사용자 권한 부여
▶ REVOKE : 데이터베이스 사용자 권한 회수
* TCL(트랜잭션 제어 언어)
▶ COMMIT : 트랜잭션 확정
▶ ROLLBACK : 트랜잭션 취소
▶ CHECKPOINT : 복귀지점 설정
*************** 실습 ***************
1) DB 생성 (CREATE)

- CHARACTER SET UTF8(인코딩 방식)
- 편집 > 조합 > latin에서 utf8로 변경
- @(~를 통해(암호입력 등))
- '%'(누구나 접속가능)
2) DB에 권한부여/회수 (GRANT / REVOKE)

- ALL PRIVILEGES(모든권한부여)
- FLUSH PRIVILEGES(변경내용 메모리에 반영)필수!!
3) 테이블 생성 (CREATE)

- PRIMARY KEY : 식별자이기때문에 중복값 생성불가능
- VARCHAR(100) 은 문자열(길이)라는 뜻
- COMMENT는 필수적으로 달아주자!(유지보수에 용이함)
4) 테이블 데이터 삽입(INSERT)

- NOW() : 현재날짜에 대한 함수. 앞서 작성한 DATE는 날짜만 받아들일수 있지만, NOW함수는 시분초까지
나오기 때문에 시분초 절삭에대한 경고가 뜸
- CURDATE() : 현재날짜에 대한 함수로 날짜까지밖에 안나오기때문에 DATE를 사용할때 CURDATE사용 권장
5) 테이블 데이터 조회(SELECT)

- 작성순서 : SELECT 컬럼명 FROM 테이블
- 실행순서 : FROM > WHERE > SELECT (범위가 큰순서부터 실행한다, 무조건 FROM 부터 실행된다)
***** 참고사항 *****

- 해당방식으로 FROM 테이블 부분에 AS u(아무거나 상관없음. 대표할 문자)로 선언해주면
SELECT 구문(다른 구문도 상관없음)에서 컬럼명 작성시 u.만 작성해도 자동완성으로 컬럼을 작성할 수 있다.
- 해당 테이블에 속하는 컬럼을 보기쉽게 구분해준다.
6) 테이블 데이터 변경 (UPDATE)

- 작성순서 : UPDATE 테이블명 SET 컬럼명=수정내용 WHERE 수정위치
7) 테이블 데이터 삭제 (DELETE)

- 작성순서 : DELETE FROM
- DELETE 구문 사용시 컬럼명이 들어가면 에러, DELETE 다음 바로 FROM 후 WHERE절 사용
- TRUNCATE 구문사용시에는 바로 TABLE 작성하여 삭제(삭제후 테이블만 재생성)
8) 테이블 복제 (CREATE)

- 작성순서 : CREATE TABLE 새로복제할 테이블명 SELECT 복제할 범위 FROM 원본 테이블
9) 삽입키 중복시 데이터 수정 (DUPLICATE)

- ON DUPLICATE KEY UPDATE 구문을 추가작성하여 중복될 데이터 수정
- 자주 사용하지않으니 참고만 하자!!(UPDATE 구문을 사용하여 수정하는 것이 더 용이하다)
***** 참고사항 *****

- 구문 사용시 IGNORE를 사용하면 삽입키 중복 발생을 무시하고 중복발생 부분을 제외한 나머지 부분을 실행한다.
10) 테이블 데이터 조회 정렬 (ORDER BY)

- 작성순서 : SELECT 컬럼명 FROM 테이블명 ORDER BY 컬럼명 정렬방식
- 오름차순은 ASC, 내림차순은 DESC 이며, 미작성시 defalt값은 오름차순이다.
- 실행순서 : FROM > SELECT > ORDER BY
11) 테이블 데이터 출력 개수 제한 - LIMIT

- 출력 갯수의 제한을둔다.
- 가장 마지막에 실행이 된다.
- 작성형태 : LIMIT 개수; 형식으로 작성하지만 시작지점을 잡아서 LIMIT 출발지점, 개수; 형식으로 작성할 수 있다.
(출발지점의 번호는 0번부터 시작한다.)
12) 테이블 중복데이터 조회(한개만 조회)

- 중복 데이터가 있을시 한개만 조회한다.
- 하단의 BINARY는 한글을 정렬할때 사용하는데 요즘은 한글이 지원이되어서 사용X
13) 사용자 지정 정렬

- 사용자가 지정한 순서대로 정렬하여 조회한다.
14) 테이블 데이터 그룹 출력(GROUP BY) (중요**)

- 테이블을 그룹을 출력하여 조회한다(중복허용X)
- COUNT를 사용하여 데이터의 개수를 조회할 수 있다.
- 주로 COUNT를 사용하여 그룹의 개수를 파악할때 사용된다.
15) GROUP BY 출력의 조건식 (HAVING)

- 조건식을 상정하여 해당 조건에 해당하는 부분만 출력하도록 도와준다.
***** mySQL 재설치 방법(안될때) *****
1. 윈도우 > 서비스 검색
2. 서비스 관련 창 > mysql선택 > 서비스 중지
3. 윈도우 > 프로그램삭제 > mysql 선택 후 삭제
4. c: program files > Mysql 폴더 삭제
5. c: program data > Mysql 폴더 삭제(보기 > 숨김항목 체크)
6. 이후 재설치
***** 파일백업 방법 *****


- 저장된 파일을 메모장 > 붙여넣기 해도되고 그냥 실행해도된다