Database
- 다수의 인원, 시스템 또는 프로그램이 사용할 목적으로 통합하여 관리되는 데이터의 집합
데이터베이스의 개념
- DataBase Management System
- 데이터의 중복을 막을 수 있고 자료의 일관성을 유지할 수 있다.
- 데이터를 쉽게 검색 할 수 있고 데이터의 통합이 쉽다.
- 여러 사람이 함께 자료를 열람 할 수 있고 보안을 적용 하기가 쉽다.
- 대용량의 기억공간를 제공
DBMS의 종류 및 규모
- My-SQL : 중소 기업, PHP, JAVA.
- SQLite : 스마트폰 및 임베디드 기기의 내장 데이터베이스로 사용, Android, iPhone.
- Oracle : 중대규모 기업의 데이터베이스로 사용, JAVA.
- MS-SQL : 중소 기업, MS기반 운영체제만 사용 가능, ASP.NET.
- 오피스 : ACCESS(.mdb)
- Google Cloud : Java, Perl
데이터베이스 종류
- 파일시스템
- 관계형 데이터베이스 관리시스템(RDBMS)
- 가장 보편화된 데이터베이스 관리시스템이다.
- SQL문이 필요
- Oracle DB , MySQL , Maria DB
- NoSQL 데이터베이스
- SQL문이 없다.
- Mongo DB
데이터베이스 관리시스템(DBMS) 특징
- 데이터 무결성
- 데이터 일관성
- 데이터 회복성
- 데이터 보안성
- 데이터 효율성
CSV 변환
- CSV는 , 로 구분기호가 되어있는 파일이다. 이걸로 데이터 저장을 많이 한다.
- 만약 받은 데이터가 txt파일이라면
- 엑셀 -> 열기 -> 데이터.txt -> 구분기호 및 텍스트 선택 해주고 엑셀파일로 변환 -> 다시 csv 파일로 변환하여 저장하고 사용한다.
임포트툴 사용
sqldeveloper -> 접속 -> myOracle11g(DB명) -> 테이블(우클릭) -> 데이터임포트
직접 cmd를 통한 데이터 입력
일단 테이블구조를 넣은 테이블명.ctl 파일을 생성한다.
그리고 이 작업을 할때는 왠만하면 하기 편하도록 csv 파일과 ctl 파일을 같은 경로에 위치시킨다.
1 |
|
- cmb > 파일을 저장한 경로로 이동.
- -> sqlldr(컨트롤파일 실행할때 명령어) 아이디/비번 control=”파일명.확장자”
SQL문
- DCL명령어 Data Control Language 제어어 - 사용자가 별로 쓸일 없음. 호스팅업체가 주로 사용 - grant (사용자 접근 권한부여) - revoke (사용자 접근 권한 취소) - deny (특정사용자만 접근차단)
- DDL명령어 Data Definition Language 정의어 - DB및 TABLE에 대한 정의 - Create (생성) - Drop (삭제) - Alter (수정)
- DML명령어 Data Manipulation Language 조작어 - 레코드작업 - Select (조회 및 검색) - insert (삽입) - update (수정) - delete (삭제)
- sungjuk 테이블 삭제
1 |
|
- sungjuk 테이블 생성
한글은 2byte라 5글자 들어감. 한글 인코딩에 따라 3byte도 들어감. 영문은 10글자.
not null : 빈값 허용 하지 않음 , 이걸쓰지않으면 빈값허용.
1 |
|
- sungjuk 테이블 구조 확인
1 |
|
- sungjuk 테이블 구조 수정
insert 한 table에 대해 수정하는건 update
create한 table에 대해 수정하는 건 alter
alter를 많이쓰는건 애초부터 구조를 잘 못 했기때문에 좋은건 아님.
alter table 테이블명 rename column 원래칼럼명 to 바꿀컬럼명; -> 컬럼이름변경
1 |
|
- 칼럼 삭제
alter table 테이블명 drop(칼럼명);
1 |
|
- 칼럼 추가
alter table 테이블명 add (칼럼명 데이터타입)
1 |
|
연습
- sungjuk 테이블을 아래와 같이 수정하시오.
- uname 칼럼의 글자수를 50개로 수정
alter table 테이블명 modify (수정할 사항);
1 |
|
- uname 칼럼을 null 조건으로 수정
1 |
|
Transaction
- 데이터 파일의 내용에 영향을 미치는 모든 거래
- insert , update , delete 쿼리가 사용되는 경우 Transaction 상태가 된다.
- 데이터 변형되면 상황에 따라 복구되어야 하는 상태가 필요한 경우 명령어를 이용하여 최초 상태로 데이터를 돌릴 수 있다.
- commit work(commit)
동시에 다수의 작업을 독립적으로 안전하게 처리하기 위한 상호작용 단위
- 일 처리 단위
- 분할할 수 없는 최소단위
목적
- 안전한 거래를 보장
특징
- 원자성 : 트랜잭션은 한꺼번에 완료되거나 한꺼번에 취소 되어야 함
- 일관성
- 고립성
- 지속성
TCL 명령어
- COMMIT : 거래 내역을 확정함
- ROLLBACK : 거래 내역을 취소함
- CHECKPOINT : ROLLBACK할 위치를 지정함
명령완료
변경된 데이터 확인 후 데이터 영역에 적용
1 |
|
- rollback work(rollback)
명령 취소
변경된 데이터를 취소하고 원래대로 복구한다.
sqlplus는 자동커밋된다.
1 |
|
실습
cmd > sqlplus에서 테스트
시작 -> cmd -> sqlplus 아이디/비번
테이블 생성
1 |
|
테이블 구조 확인
1 |
|
행추가
1 |
|
명령어 한꺼번에 모두 다 취소 (ROLLBACK)
행 갯수 카운트 하면 0이 됨.
방금전에 했던, 15분 이전까지 했던 모든 작업들을 취소하는 것
명령어 한꺼번에 취소
1 |
|
명령어 완료 및 확정 (COMMIT)
COMMIT 하지 않고 그냥 cmd창을 빠져나오면 다시 행갯수가 0이 된다.
이클립스나 외부 프로그램을 연결해서 쓸때는 자동커밋이 되는데. 이렇게 직접 cmd창으로 할 때는 자동저장 되지 않기 때문에 COMMIT을 해줘야 한다.
sqlplus에서는 그냥 창닫기를 하면 자동 ROLLBACK되므로 주의!
1 |
|
롤백시점 지정(CHECKPOINT)
1 |
|
이렇게 하고 롤백취소
1 |
|
COMMIT한 자료의 복구 방법
1 |
|
- undo_retention
- DELETE , UPDATE후에 커밋 할 경우 속성값의 시간(초)까지는 오라클에서 임시로 저장한 데이터로 복구할 수 있다.
- DEFAULT 속성값은 900초(15분 정도->변경가능 -> COMMIT을 했을 경우 15분간만 값 저장)
- 시간을 1500초(25분)으로 늘릴려면
1 |
|
undo_retention 기능을 이용한 데이터 복구 방법
15분 이내에 dep테이블에서 커밋된 데이터 출력
일시적이고 실시간적임
1 |
|
삭제하고 커밋한지 15분 안의 데이터를 복구
1 |
|
Table
- Schema(스키마)
- 물리적 스키마(테이블)
- create , insert 등을 직접한 값들
- 논리적 스키마(테이블)
- 조인 , 뷰 등을 통해 만들어진 값들
- 데이터베이스 저장 단위
- CRUD
- Creat , Read , Update , Delete
예시
1 |
|
테이블 생성
1 |
|
예시
– 표시는 주석
1 |
|
테이블 삭제
1 |
|
행 추가 - Create
1 |
|
예시
평균은 만들어진값 칼럼을 이용해 만들 수 있다.
1 |
|
칼럼명이 생략되면 values() 값은 테이블 설계순으로 입력
자바에서는 이렇게 쓰면 유지보수때 힘듦.
1 |
|
복수 레코드 행 추가
1 |
|
조회 및 목록 - Read
1 |
|
예시
1 |
|
행 수정 - Update
백업이 없으면 영구히 수정
1 |
|
예시
1 |
|
행삭제 - Delete
백업이 없으면 영구히 삭제
1 |
|
예시
select count(*) from 테이블명; – 남아있는 행 갯수
1 |
|
연습
- address 테이블 생성.
- 테이블 생성
1 |
|
- 행 추가
1 |
|
- 조회 및 목록
1 |
|
as (생략가능)
- 특정 칼럼명, 테이블명을 일시적으로 리네임
1 |
|
count() 함수
레코드 갯수(행갯수)
null 값은 카운트 대상이 아니다.
1 |
|
국어점수 합산 , 그 중 최고점 , 최저점 조회 및 평균
1 |
|
국영수 각 과목의 평균점수 조회하기
1 |
|
정렬 (sort)
오름차순 ASCending ASC –기본값
내림차순 DESCending DESC
java로 DB를 가져올 땐 정렬해서 가져오기
order by 칼럼1,칼럼2,칼럼3,~~
칼럼 1을 기준으로 내림차순 정렬하고 , 칼럼1값이 동일하다면 칼럼2를 기준으로 오름차순 정렬하고 칼럼2값도 동일하다면 칼럼3을 기준으로 오름차순으로 정렬.
order by 칼럼1 desc,
칼럼2 asc,
칼럼3, ~~~ –아무것도 안쓰여져 있으면 기본값 오름차순
1 |
|
- 2차 정렬
국어 점수가 동일하다면 이름으로 정렬
1 |
|
- 3차 정렬
1 |
|
-
맨 위 1건만 조회
1
2SELECT * FROM salaries ORDER BY from_date DESC LIMIT 1;
조건절
- where 조건절
- 조건에 만족하는 레코드만 대상
- having 조건절
- group by 절과 같이 사용
- on 조건절
where 조건절
- 특정한 레코드를 수정, 삭제, 조회하기 위해 사용
- 산술연산자 : + - * /
- 비교연산자 : < <= > >= !=(<>) =(같다,대입연산자)
- 논리연산자 : and or not
dual 테이블
결과값을 일시적으로 출력할 때 유용한 임시 테이블
1 |
|
조건절 연습
- 국어점수 90이상 조회
1 |
|
- 수학점수 50점 미만 조회
1 |
|
- 이름이 ‘무궁화’ 조회
1 |
|
- 이름이 ‘대한민국’ 행의 평균을 구하시오
1 |
|
- 비어있는 aver 칼럼을 조회하시오
where aver=null; 이렇게 하는 것은 틀린방법
1 |
|
- 비어있는 aver 칼럼의 갯수를 구하시오
1 |
|
- 비어있지 않은 aver 칼럼의 갯수
1 |
|
- 국영수 모두 100점의 행을 평균을 구하시오
1 |
|
- 국영수 모두 50미만인 행의 평균을 구하시오
1 |
|
- 비어있는 평균값을 모두 채우시오
1 |
|
- 평균 60~69점 사이의 평균, 이름 조회
1 |
|
between A and B
1 |
|
- 국영수 중에서 한과목이라도 40점 미만 조회(과락)
1 |
|
- 이름 ‘진달래’ , ‘개나리’ , ‘라일락’ 조회
1 |
|
in 연산자
일치하는 값만 찾음
1 |
|
like 연산자
- 문자열에서 비슷한 유형을 찾을 때 사용
- 문자열에서 만능문자(% _)를 이용해 비슷한 유형을 조회
1 |
|
문) 자유게시판 검색 시 제목+내용을 선택하고 검색어 happy를 입력했을 때 레코드를 조회
제목 또는 내용 둘 중에 하나라도 들어가면 검색되도록
제목은 칼럼명 subject , 내용은 content
나중에는 happy를 변수처리해야함.
1 |
|