DCL
- table : 기본 저장 단위이며 행과열로 구성됩니다.
- 뷰 : 논리적으로 하나 이상의 테이블에 있는 데이터의 부분 집합을 나타냅니다.
- sequence : 기본 키 값을 생성합니다.
- index : 질의의 성능을 향상시킴.(튜닝영역)
1. 뷰
- data의 access를 제한하기 위해
- 복잡한 질의를 쉽게 작성하기 위해
- 데이터 독립성을 제공하기 위해
- 동일한 데이터로부터 다양한 결과를 얻기위해
- 단순 뷰는 원본 그대로, 복합 뷰는 가공된(sal*12)셀 이런거
- 뷰의 또 다른 특징으로는 뷰는 자체로 가상의 table을 만들 수 있는데 이때, 가상의 table의 컬럼들은 alias로 지정된다.
1) 개념
- 테이블은 저장공간을 할당 => 물리적으로 저장, data dictionary에 저장한다. 그리고 실제 data는 별도의 저장공간에 저장한다.
- 뷰는 논리 | 가짜 테이블이라고도 하며 물리적구조가 존재하지 않는다.
- data dictionary만 쓰며 select절의 쿼리 자체를 저장하며 불러올 때마다 그것을 실행한다. 따라서 data가 항상 최신으로 보여진다.
- 수정은 create or replace view 절에서 사용하며 거의 default 값처럼 쓴다.
create or replace view 뷰이름( column 들)
as select (위줄에 명시된 column들)
from 테이블 이름
where 조건;
2) 복합 뷰
- 뷰의 join
- 단순 뷰를 통해 DML 작업을 수행할 수 있습니다.(복합 뷰는 불가.)
- 뷰 제거
뷰는 앞서 말 했듯 가상의 table이므로 select 절 처럼 실제 DB에 영향을 끼치진 않으므로 편하게 제거해도 된다. (Drop 절로 삭제)3) 인라인 뷰
- 현업에서 활용도가 가장 높음.
- SQL문에서 사용 가능한 alias를 이용한 서브 퀄리이다.
- 가본 질의의 from절에 있는 명명된 서브 쿼리는 인라인 뷰의 예이다.
4) Top-N 분석
- 문제풀이 참조
DB의 객체
- sequence : 기본 키 값을 생성합니다.
- index : 질의의 성능을 향상시킴.(튜닝영역)
1. sequence
- 고유번호를 자동으로 생성
- 공유 가능한 객체
- 일반적으로 기본 키 값을 생성하는데 사용
- 응용 프로그램 코드 대체
- 시퀀스 값을 메모리에 캐시하면 액세스 효율이 높아짐
- 날짜, 문자열은 안 되고 오직 숫자만 됨.
1) 시퀀스 생성
create sequence 테이블이름_컬럼이릅_seq
increment by 00 // 시작 숫자로부터 몇 씩 증가시킬건지
start with 00 // 테이블에 들어갈 시작 숫자
maxvalue 00 // 최대 숫자
nocache // 캐시 메모리에 저장할 것인지
nocycle; // maxvalue를 찍는다면 다시 시작할 것인지
- 캐시 설정을 한다면 해당 값을 더 빠르게 접근 할 수 있다.
2) nextval 및 currval 의사열
- naxtval은 사용 가능한 다음 시퀀스 값을 반환하며, 참조될 대마다 고유한 값을 반환한다.
- currval은 현재 시퀀스 값을 반환한다.
- currval이 값을 포함하려면 먼저 해당 시퀀스에 대해 nextval이 실행되어야한다.
- 그리고 또한 위 사진처럼 한 번 지나간 번호는 cycle이 yes이지 않는 이상 무조껀 다시 반환하지 않는다.
이것을 gap이라고 하는데 롤백이 발생한 경우, 시스템이 고장난 경우, 시퀀스가 다른 테이블에서 사용된 경우 전부 숫자의 gap이 발생한다.3) 시퀀스 수정
- 수정은 생성값에서 startwith만 빼면 된다 왜냐하면 이미 생성된 값을 다시 돌이킬 수 없기 때문이다.
- 시퀀스의 소유자이거나, 시퀀스에 대한 alter권한이 있어야한다.
- 이후 시퀀스 번호에만 영향을 준다.
- 시퀀스를 다른 번호로 다시 startwith를 하려면 삭제하고 처음부터 다시 해야한다.
- 일부 검증이 수행된다.
4) 시퀀스 제거
- 마찬가지로 drop문을 이용하여 제거하여 data dictionary에서 삭제된다.
2. Index
1) 생성방법
- 자동 : 테이블 정의에 pk또는 uk제약 조건을 정희하면 고유 인덱스가 자동으로 생성됩니다.
- 수동 : 사용자가 열에 고유하지 않은 인덱스를 생성하여 행에 대한 엑세스 시간을 줄일 수 있습니다.
create index 테이블이름_컬럼이블_idx
on 테이블이름(컬럼이름)
- 필요한 경우
1.열에 광범위한 값이 포함된 경우
2.열에 null값이 많이 포함된 경우
3.where절 또는 join조건에서 하나 이상의 열이 함께 자주 사용되는 경우
- 큰 table에서 대부분의 질의에 의해 검색되는 행이 2~4%미만인 경우
create session
create table
create sequence
create view
create procedure
- 시스템 권한 부여
grat 절로 부여하며 뒤에 시스템 권한 5가지 중 필요한 것을 뽑아서 부여 후 to 절로 특정 사람일 지정한다.
1) roll이란?
// 롤 생성
create role 롤 이름
// 롤에 권한 부여
grant create table, create view
to manager
// 사용자에게 룰 부여
grant manager
to 사람이름
2) 암호 변경
- DBA는 사용자 계정을 생성하고 암호를 초기화 할 수 있다.
- alter user문을 사용하여 암호변경도 가능하다.
alter user 이름
identified by 비번;
3) 객체 권한
grant 객체권한
on 테이블이름
to 사람이름;
grant 객체권한(특정 컬럼)
on 테이블이름
to 사람이름, 사람이름;
- 취소(revoke)