상세 컨텐츠

본문 제목

[Data Base] 2019.06.24. 기록

1 a n G u a g e /DB

by 동혼 2019. 8. 24. 22:23

본문


테이블 
데이터를 저장하기 위한 것

create table 데이블이
(
컬럼이름, 컬럼타입, (길이) [ 여기 ],
컬럼이름, 컬럼타입, (길이),

constriaint dept_a_pk printmary key (a)

)

필수 요소 테이블 이름  , 컬럼이름, 컬럼타입, (길이)

제약조건 
-PK ,FK, nn , uk, ck
-제약조건을 생성할 때도 생성이후에도 생성 가능 
-not null 만 [ 여기 ] 에 기록 가능 ( constraint 가 생략가능해서 생략됨 )

alter table 

add 
- (a number (t));
- 컬럼이름과 데이터타입 길이 
- pk, fk, uk, ck  가능
constraint 이름 유형 (column)

modify
- dauatype 변경
- 길이를 줄이거나 키우거나 
- (a number (t));
- 컬럼이름과 데이터타입 길이 
- 무결성따름
- nn
- a constraint 이름 유형 ;

drop column
- table 삭제할 때 사용 

trauncate table 
-delete
 

__________________복습



2권 15p
vew
 -중요
- 데이터의 엑섹스를 제한하기위해 만들어진 객체
- select 문장을 대체가능함
- 단순뷰 : - 보여주는 데이터 == 테이블의 원래 데이터
테이블의 데이터를 그대로 보여주는 데이터 
- DML 연산이 가능하다 (공식) 현업에선 데이터보안때문에 뷰를 통한 DML 연산 안하는 편 


- 복합뷰 : - 테이블의 데이터가 변경된 걸 보여주는 데이터 
 - DML 연산이 불가능 
- 가짜 테이블이라고 불린다
 테이블은 실제로 데이터를 가지고 있으니까


  1  create view empvu80
  2  as select employee_id, last_name, salary
  3  from employees
  4* where department_id = 80
SQL> /

View created.


-
SQL> create view salvu50
  2  as select employee_id ID_NUMBER, last_name NAME, salary*12 ANN_SALARY
  3  from employees
  4  where department_id = 50;

View created.

SQL> select * from salvu50 > 생성한 뷰 확인 가능






뷰와 테이블의 차이란 ?

-뷰는 변경된 값을 적용할 수 있다

테이블
- 생성시 컬럼이름, 길이, 데이터 를 저장하여 저장구조가 생성된다
 논리적으로 무언가 만들어진 것

- 수정시 alter 테이블로 구조를 변형시킴 



- 생성시  select의 문장을 저장한다
select empidd 
fromm emp
where depfid = 50 ; 
즉 create view 어쩌고 , 자체를 저장한다 
-복작합 질의의 값을 간단하게 한다 

- m 일회성 
- alter 명령어는 없다/ 뷰수정하는건 뷰가 가지고 있는 select어쩌고 웅엥웅
 create or replace 을 써서 덮어서 수정되는것처럼 보이게 만든다 

- 뷰가 가장 많이 쓰일 때  ex p27 같은것, 주기적으로 확인해야하는 통계값들
 매주 물건의 웅엥웅 을 할 때


뷰 제거 p34
- 테이블에 영향없이 삭제한다 
select 만 없애는 거니까 




____________________인라인 뷰 p35 
- 현업에서 가장 많이 사용
- from 에서 사용하였던 서브쿼리를 일라임 뷰라고 한다 

__________
+
  1  select rownum, salary
  2* from employees

 rownum 은 행 출력이 웅엥웅 ? 

__________

-급여를 많이받는 상위 3명 출력
select rownum, last_name, salary
from employees
where romnum <=3
order by salary desc
/

-정렬 잊지마 . . . ! 
-하지만 where이 먼저 실행되어 우리가 원하는 값이 안된다

select rownum, last_name, salary
from (
select rownum, last_name, salary
from employees
order by salary desc
)
where rownum <=5
/
-그래서 from 에서 서브쿼리를 ( ==인라인 뷰 ) 를 사용한다

인라인뷰란 
-from 절에서 임시 공간에 테이블을 생성하여 사용하는 뷰와 비슷한 저장 형태
(+ 서브쿼리는 where 조건 절에서 비교형태로 사용되는 형태
스칼라서브쿼리 select  절에서 함수처럼 사용되는 쿼리문을 말하며 반환값은 한개여야한다
출처 : https://seohc.tistory.com/103?category=485501 )

- 큰 장점 : 변경된 값을 근거로 해서 기존에 있는 테이블과 비교를 할 때 


-35p

select a.last_name, a.salary, a.department_id, b.maxsal
from employees a, 
(
select department_id, max(salary) maxsal
from employees
group by department_id
) b
where a.department_id = b.department_id
and a.salary < b.maxsal 
/



top-n 분석
- 상위 몇개 하위 몇개를 분석할때 
- rownum / 
- where 이나 having 에서는 order by 절을 사용 안했다 ?

p38
select rownum as rank , last_name, salary
from (
select last_name, salary
from employees
order by salary desc
)
where rownum <= 3 
/
-nownum 는 크다는 값은 없다 
cuz 행이 출력이 되면 rownum 이 생성되는데
보다 크다/ 크다는 건 그 전의 값이 출력되지않았기 때문에 just 크다는 값은 존재하지 않는다
ex / 38p 의 
where rownum > 3 하면 no rows selected 라고 없다고 뜬다




______________________________t 

회사의 평균 급여가 많은 상위 3개 부서의 번호와 평균 급여를 출력하시오
-흰트 : select 는 내가 보고자하는걸 출력하고, , , ,웅엥웅

select rownum as rank, department_id, avg(salary)
from
(
select department_id, avg(salary) AVG
from employees
group by department_id
order by avg(salary) desc
)
where rownum <= 3
/

- avg(salary)  때문에 오류가 나느데 이유는
avg 로 시작하는 건 테이블로 시작하지않는다, 사용하지 못한다
그래서 alais를 줘야한다 
-인라인 뷰가 테이블처럼 사용되는데
컬럼 헤딩들이 테이블이 실행되는 동안 
avg , sum 등은 컬럼이름(헤딩)으로 사용할 수 없다 그래서 알리아스를 줘야한다 
- 인라인 뷰는 그게 실행되는 동안 테이블처럼 사용된다 

즉 아래처럼 바꿔줘야한다.

select rownum as rank, department_id, AVG
from
(
select department_id, avg(salary) AVG
from employees
group by department_id
order by AVG desc
)
where rownum <= 3
/
-rownum는 그때그때마다 출력이 되는 행의 갯수를 추출해주는 함수 == 추출해주는 함수 

______________________________



인덱스 57p
- 컬럼단위에 설치를 한다
- 별도의 저장형태를 배열 형태로 가지고 있다
- 테이블 풀스택 == 순차 어쩌고
- 인덱스를 찾고 그에 해당하는 포인터를 보고 값을 찾아간다 
- PK , UK 를 설치하면 자동으로 인덱스를 설치한다
- pk, uk의 공통점은 중복이 없다.

- 범위선정? 할 때 좋다 > 순차적으로 되어있기에 빠르다
- 전체데이터에 인덱스를 할당하지 않는이유는 전체의 4%만 하는게 빠르다
- DB설계 : 마지막 물리적설계때 인덱스를 설계함

동의어 67p
- 오라클에서만 사용할 수 있음




시퀀스 46p

- 자동번호 생성기
- primary 키에 자주 사용함

ex 엑셀에서 드레그하면 자동으로 번호생성되는 것
- 공유할 수 있는 개체이다
- 메모리에 캐시(메모리에 저장하는 무엇) 가 누적된다 
- 스텍 : 입구 == 출구 / 
- 큐 : 
- 리프 : 입구 != 출구
메모리를 저장할 때 여러 방법이 있는데 대중화 되어있는게 스텍 큐 덱

메모리 관리 : 기존에 있는 메모리를 삭제하고 다른 메모리를 넣음 


다섯가지 옵션 사용 가능
- increament by x
- 그 다음번호가 생성되는 증가값 x만큼 증가하여 다음에 x+10 이 생성됨
- start with x
- 시작번호가 x
- naxvalue x
- 생성되는 최대값이 x값
- nocache
- 디폴트값은 노캐시 / 디폴트라 생략가능

- nocycle
- 디폴트값은 노사이클 / 디폴트라 생략가능
- 사이클옵션을 준다면 다사용하고 재사용이 가능하다 / 재사용이 가능하다
- for (i=10; i<=100 ; i+10) 일경우 i=100되고 난 뒤에 다시 i=10부터 시작한다
- 중복된다
- 무결성에 어긋난다 
- primary key 를 생성할때 제일 많이 사용한다

p48
create sequence dept_deptid_seq
increment by 10
start with 300
maxvalue 9999
/
-확인방법1
select sequence_name, min_value, max_value, increment_by, last_number
from user_sequences
/

-확인방법2
select sequence_name, min_value, max_value, increment_by, last_number
from user_sequences
where sequence_name = 'dept_deptid_seq'
/




- insert 문장 으로 새로운 행 실행 
- 확인 ( select *from departments )
- rollback 하면 생성된 트랙잭션1 이 사라지고 다시 새로운행 실행하면 트랜잰션 2 가 생긴다
- 트랜잭션1 이라는 공백이 생긴다 
- 다른 곳에서 시퀸스 생성(트랜잭션3)하면 그이후의 번호(트랜잭션4)로 생성한다 

- 시퀸스는 한 번 생성을 해버리면 더이상 추출하지않는다 
- 다른 곳에서 시퀸스 생성하면 


insert into departments(
department_id, department_name, location_id )
values (
dept_deptid_seq.nextval, 'Support', 2500 )
/



시퀸스 수정
- 이전에 생긴거에는 영향을 안 주고 이후에만 영향준다
- start with는 절대로 바꿀 수 없다
 start를 바꾸고 싶을 경우에는 삭제하고 재 생성 해야한다
- maxvalue 를 수정하고 싶은 경우에는
 기존에 생성이 되었던 (줄일때) 일부검증을 해서 맞는지 틀린지를 검증하고 맞으면 되고 틀리면 안됨 
( 이미 생성된 값은 영향을 못 주기에 줄일경우 이미 만들어진 거 이전으로 못 수정함 )



primary 키에 자주 사용하는 시퀸스
-개념적설ㄱㅖ 에서 논리적설계로 넘어갈대 


__________정리 DDL

테이블 
- 디폴트 4개 값 갖기
- 데이터베이스의 무결성을 위해 제약조건 가짐
- 제약조건 5가지
- 변경, 수정은  alter table 어쩌고로 한다
- 드랍은 한 번 더 고민 /오토커밋이 일어나서 백업본이 없는 이상 절대 복구할 수 없다


- 가짜테이블
- 형성할때 사용한 select명령문을 저장한다
- 두가지 : 단순 뷰 , 복합 뷰
- 데이터의 엑섹스를 제한 할 수 있다 
- 뷰 수정 alter view X , 새로운 뷰 생성해서 덮어쓴다
- 인라인 뷰 : from 절에서 사용되는 서브쿼리st
- rownum 
- top 

시퀀스 
- 중복되지않는 일련 번호
- create 시퀀스
- 5가지 (start with
- 수정 alter 시퀀스 / but strat with는 수정불가 > 재생성하기


인덱스
- 데이터 검색속도 증진위하여 사용
- 동의어를  통한것





________________________________________________
________________________________________________
________________________________________________
________________________________________________ DCL 71p
data control language


시스템 권한 
- 백가지 권한이 있다 (외울필요 ㄴ )
- 대표 create user / drop user / drop ant table 등 p75
데이터 권한




________________1run =1R

SQL> conn system/12345 > 시스템 계정으로 로그인 
Connected.
SQL>
SQL> create user test > 유저 만들기 
  2  identified by test
  3  ;

User created.

________________2run =2R
SQL> conn test/tset
ERROR:
ORA-01017: invalid username/password; logon denied


Warning: You are no longer connected to ORACLE.
SQL>

1R
grant create session to test > grant 로 권한 부여 / 권한은 여러 유저에게 동시 부여 가능 
/


롤 만들기
-롤 = 여러 유저에게 권한을 동시 부여할 때 사용

create role manager ; > 
grant a, b, c to manager ; > a, b, c 에게 메니저 권한을 줌
grant manager to scott, test;  > scott, test 에게 롤을 부여함 

grant d to manager ;  > 메니저라는 권한을 a,b,c,d 에게 줌
> 새로운 메니저 권한을 준다면 메니저 권한을 가진 scott, test 는 자동으로 메니저 권한을 가지고있다
> roll만 관리하면 roll에 관여된 모든 유저들을 

-sysDBA
- 계정이 있는게 아니고 디비의 모든걸 컨트롤 할 수 있다
- conn /as sysdba 하면 


alter user  로 암호변경(DBA == system ) 하지만 유저가 변경 가능 하다 


객체권한  p82


???????????????????

권한은 기본적으로 DBA가 줄 수 있지만 일반 유저1는 권한을 타인2한테 권한이 없다
하지만 DBA가 마지막에 with grant option을 한다면
유저1이 권한을 타인2에게 전달 가능 하다 > ?????????
( 권한종속이 가능하다 )

DBA가 권한을 회수하면 종속된 권한은 모두 끌려온다

system 권한
회수할때도 준 사람만 권한회수 가능
with admin optin 
종속적으로 회수가 안된다 

???????????????????


-create user 하는 방법/ 패스워드 / 유저수정 / grant 로 시스템 권한 / 회수 하는 명령어 / 

관련글 더보기

댓글 영역