빅데이터 서비스 교육/데이터베이스

데이터베이스 데이터 조작

Manly 2022. 5. 1. 17:15
반응형

select 저장된 data를 활용하기위해서 사용


dml -> 데이터 조작언어 
    ex) 새로운 사원이오면 사원번호 급여 등을 데이터베이스에 등록하고 수정등을 하는 언어 를 dml언어라고 한다. 
 -> 삽입, 삭제, 변경을 통해 DB운영을 한다.

   ex) insert, delete, select, update ....
 
데이터를 가공을해서 정보를 얻어내는것 -> 정보처리
정보처리
1. 일괄처리 (하나하나 하지않고 모아서 한번에 처리) : 한번에 하나만 처리하기때문에 안정적. / 모을때까지는 처리를 못한다. 실시간 피드백불가
2. 실시간 온라인 처리 : 바로 피드백 가능 / 시스템에 부하가 심하다
3. 분산처리 : 실시간 온라인 처리의 단점 부하가 심한것을 처리하는 용량을 늘린것
하이브리드: 일괄처리 + 실시간 온라인 처리
   ex) DB안에서는 일괄처리, user가 요청한 작업은 실시간 처리.
 
 
트랜잭션 -> DB에서 일어나는 작업의 단위(모음), 일괄처리의 기준
        작업이 시작했을때부터 끝났을때까지를 트랜잭션이라 한다.

commit: 트랜잭션이 정상적으로 수행 되었을때의 내용을 데이터 베이스에 물리적으로 영구히 저장하는것.

  Rollback: 잘못된 트랜잭션이 수행 되었을때 트랜잭션을 트랜잭션 이전 시점으로 취소 시키는것. 
 
select는 테이블 데이터만 불러오므로 트랜잭션에 해당되지 않음.

commit -자동: 새로운 트랜잭션이 시작되면, 그전의 트랜잭션은 자동으로 commit
            프로그램 정상종료할때
   -수동: commit 명령어를 수행
 
--DML 언어 (insert update delete) -> "연속된" 문장 전체가 1개의 트랜잭션


DDL(create) -> 문장 하나가 1개 트랜잭션 auto commit
DCL(grant)  -> 문장 하나가 1개 트랜잭션 


insert
insert   -> 1 연속되는 트랜잭션 DML
create    -> 2 새로운 트랜잭션이 실행되며 그전 트랜잭션 자동 commit
insert    -> 3
create    -> 4        


insert  1
insert  2
rollback   -> 롤백으로 아직 commit 되지않은 데이터 1,2 취소
insert  3  -> 저장
create  -> 저장 (문장 하나가 트랜잭션으로 auto commit된다.)
rollback

-테이블은 내용에 의한 참조를 하기 때문에 행의 위치를 제한하지 않는다.

insert: 테이블에 새 행을 추가 한다. 테이블의 마지막줄에 추가됨. 
delete-> 행단위 작업
update-> 열단위 작업


insert into values       -> 한번에 한 행만 추가된다.
insert 작업때는 테이블의 구조를 확인해서 데이터형과 길이(자리수)를 맞춰서 삽입해야한다.

insert into table(삽입하고자 하는 테이블명) -> 테이블명의 모든 column에 데이터 삽입
values (실제 입력할 값(데이터))

insert into table(a,b,c) -> 명시된 column에만 데이터 삽입
values (실제 입력할 값(데이터))


into절에 명시된 컬럼의 순서, 개수, 데이터타입, 길이에 맞게 values의 데이터가 반드시 1:1로 매칭되어야한다.

insert into table(b,c,a)  values (b,c,a);
desc로 컬럼의 순서를 볼 수 있다.

무결성 검증
 - 컬럼 무결성 검증 : 데이터 타입과 길이에 맞는지
 - 제약조건 무결성 검증(PK, FK) 
 
 insert into table(column) values 값
                  컬럼명들은 생략가능
 에서 4개의 컬럼이 들어가는곳에 3개의 컬럼과 3개의 values 값만 넣으면 나머지 한개는 null값이 자동으로 들어간다.
 
 테이블에 null값을 삽입하는 방법
  - 자동: into절 column과 values값에서 생략하면 자동으로 null값이 들어간다
  - 수동: values절과 into절 column에 null을 명시해서.
  
  
--update: 열단위 작업

update 테이블 set department_id = 70
           (변경값 지정)
where employee_id = 113; -> where절은 생략가능 생략하면 컬럼전체를 수정    



--delete
delete from 테이블 where 절 -> where절 생략가능 생략하면 컬럼전체를 수정



FK의 값이 참조값(PK의 값) 범위 안에서 라면 중복,null 허용등 수정작업이 조금은 자유로운편이다 , pk에 없는 새로운 값으로는 변경 불가능

PK는 중복값 허용x, 새로운 값으로 변경가능 (단, FK에서 참조하지 않는 값일 경우에만 가능하다 
                                   FK에서 참조한 값이 PK에서 변경되어버리면 데이터 무결성이 깨진다.)   
   


DB -> 동시성: 트랜잭션이 진행중인 행(락이 걸린 행)이 아니라면 동시에 수행이 가능하다.
데이터 베이스의 읽기 일관성: 모든 트랜잭션은 여러명이 동시에 DB를 수정중이여도 수정중인 데이터를 볼수없고, 트랜잭션 시작 전 데이터만 볼수있다.   
                          
  T1실행(트랜잭션1실행)
ex) 1명 1억,  25명 10만원 -> update를 통해 salary 10억으로 . -> 현재 db는 1명 1억, 1명 10억, 24명 10만

update emp set salary = 1000만 where sal=10만;
   T2실행(새로운 트랜잭션2실행)                   
   
데이터 베이스의 대기 : 트렌잭션이 실행 시작되면 작업이 진행중인 행에 대해서는 잠금장치가 걸려서
                트랜잭션이 끝날때까지 대기하게 된다.   ->병행제어..라고한다

코드를 짤때 ex 회원가입이라면 insert후에 commit명령어를 넣어야 대기상태에서 끝나서 오류나지 않는다.

작업중인 각 두행에 크로스로 침입 할때 고착상태가 된다. 
a: 1행작업중    b: 2행작업중에   ->    b가 1행을 수정하고 a가 2행을 수정했을때 고착상태가 나타난다.
                                     두 작업자 모두 대기상태에 들어가지만 해결은 가능하다.



--9장
테이블 생성 및 관리

DDL명령어: 데이터 정의어 -> 객체 구조 정의 : 생성 / 수정 / 삭제
                    객체: 테이블 (기본저장단위), 뷰(데이터 전체가 아닌 일부분을 보게 해준다 / 보안과 관련)
   ,시퀀스(자동으로 번호 생성), 인덱스(테이블 데이터의 검사 속도를 향상시키기 위해 사용), 동의어
   테이블 / 뷰 / 시퀀스  ->   중요
   
테이블 생성에 필요한것 -> 테이블 이름, 컬럼명, 컬럼의 데이터타입 과 길이 -> 구조

테이블 이름 및 컬럼이름
-문자로 시작해야 한다.
-1~30자 까지 가능
-대문자, 소문자, 숫자(0~9),_,$,#만 가능하다. (한글도 사용도 가능한데 저장공간이 많이 필요해서 대부분 영어로)
-한 계정에 똑같은 이름의 테이블이 존재할 수없고 같은 테이블에 같은 컬럼명 존재할수없다.
-오라클 서버의 예약어가 아니어야한다. ex)select
   

- 테이블 생성: 
create table dept (deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13));
        명령어 테이블명   컬럼명  datatype                데이터 길이
 
 
1.테이블 생성   create table    2.데이터 삽입  insert   3.저장 commit   ->  DB구현

meta data   101동-> 101호 102호   : 101동 101호의 데이터에 대한 표현들 ex)집의 구성원들 부모,자식,애완동물 등등
                                   meta data 라고 한다.

데이터 유형
text데이터: 문자, 날짜, 숫자 데이터  
음성 ,영상, 이미지 데이터 -> 멀티미디어 데이터

 long~bfile:용량이 큰 데이터들 rowid: 인덱스

char: 고정길이 문자데이터
varchar2: 가변길이 문자데이터
  
aaa를 저장한다면
char(5)는 저장공간을 미리 분류해놓고 aaa를 저장시킨 후 나머지 2개의 자리는 사용을 못한다  -> 성능은 좋지만 공간활용이 많이된다.
varchar2(5)는 데이터 사이즈를 보고 사이즈에 맞게 공간을 할당한다  -> 성능이 떨어지지만 공간활용이 좋다.
  
char() 괄호에 길이를 지정할때 들어올 데이터보다 20%정도 크게 지정하는게 이상적이다. ->DB의 확장성 때문에 (추가 할것을 생각해서)

number: 음수, 양수 사용가능 -> 가변성이 커서 저장공간이 너무 들어간다.
number(p): 정수만 사용가능 
number(p,s): s가 소수점자리를 뜻한다. -> 주로사용한다.

date: 연/월/일 등 날짜, 시간 저장할때   -> 시차가 다른지역에서 저장해도 저장한 시간대로 그냥 저장된다.
timestamp: 날짜와 시간,분,초까지 표기가 된다.
    ex) hire_date timestamp   

반응형