시퀀스
: 자동 순차 증가하는 순번을 반환하는 데이터베이스 객체 (1,2,3,..)
보통 PK값에 중복값을 방지하기위해 사용
- 시퀀스 생성
CREATE SEQUENCE [시퀀스명]
INCREMENT BY [증감숫자] //디폴트 1
START WITH [시작숫자] //디폴트 1
NOMINVALUE OR MINVALUE [최솟값]
//NOMINVALUE : 디폴트 1, 최솟값 무한
//MINVALUE : 최솟값 설정
NOMAXVALUE OR MAXVALUE [최댓값]
//NOMAXVALUE : 디폴트값 1027, 최댓값 무한
//MAXVALUE : 최댓값
CYCLE OR NOCYCLE
//CYCLE : 최댓값에 도달하면 최솟값부터 다시 시작
//NOCYCLE : 최댓값 생성 시 시퀀스 생성중지
CACHE OR NOCACHE
//CACHE : 메모리에 시퀀스 값을 미리 할당
//NOCACHE : 시퀀스값을 메모리에 할당하지 않음
CREATE SEQUENCE sample_seq INCREMENT BY 1 START WITH 1;
select sequence_name, min_value, max_value, increment_by from user_sequences;
SEQUENCE_NAME
--------------------------------------------------
MIN_VALUE MAX_VALUE INCREMENT_BY
---------- ---------- ------------
DEPARTMENTS_SEQ
1 9990 10
EMPLOYEES_SEQ
1 1.0000E+28 1
LOCATIONS_SEQ
1 9900 100
SAMPLE_SEQ
1 1.0000E+28 1
- .nextval : 자동 순번 할당
SQL> select sample_seq.nextval from dual;
NEXTVAL
----------
1
SQL> select sample_seq.nextval from dual;
NEXTVAL
----------
2
SQL> select sample_seq.nextval from dual;
NEXTVAL
----------
3
- .currval : 현재 순번 확인
select sample_seq.currval from dual;
CURRVAL
----------
3
- 시퀀스 생성, 테이블에 대입
create table dept_second as select * from department where 0=1; //구조만 복사
create sequence dno_seq increment by 10 start with 10;
insert into dept_second values(dno_seq.nextval, 'ACCOUNTING', 'NEW YORK'); //dno 자리에 시퀀스 대입
insert into dept_second values(dno_seq.nextval, 'RESEARCH', 'DALLAS');
DNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
select sequence_name, min_value, max_value, increment_by from user_sequences where sequence_name in('DNO_SEQ');
SEQUENCE_NAME
-------------------------------------------------------------------
MIN_VALUE MAX_VALUE INCREMENT_BY
---------- ---------- ------------
DNO_SEQ
1 1.0000E+28 10
- 시퀀스 수정
ALTER SEQUENCE 시퀀스명
INCREMENT BY a
NOMINVALUE OR MINVALUE a
NOMAXVALUE OR MAXVALUE a
CYCLE OR NOCYCLE
CACHE OR NOCACHE
시작값 수정 불가
alter sequence dno_seq maxvalue 100;
select sequence_name, min_value, max_value, increment_by from user_sequences where sequence_name in('DNO_SEQ');
SEQUENCE_NAME
-------------------------------------------------------------
MIN_VALUE MAX_VALUE INCREMENT_BY
---------- ---------- ------------
DNO_SEQ
1 100 10
- 시퀀스 삭제
DROP SEQUENCE 시퀀스명;
인덱스
: 테이블 내 데이터를 빠르게 찾기 위한 데이터베이스 객체
CREATE INDEX 인덱스명 ON 테이블명(컬럼1,컬럼2,..);
테이블의 컬럼 (1개 이상)으로 생성
트리 형식으로 생성됨
과다 시 용량 차지해 성능 저하
인덱스 사용해야 하는 경우
1. 테이블 행이 많을 때
2. where문에 해당 컬럼이 많이 사용될 때
3. join에 자주 사용되는 컬럼
- 자동 인덱스 (기본키)
SELECT index_name, table_name, column_name from user_ind_columns where table_name in('EMPLOYEE','DEPARTMENT');
INDEX_NAME
-------------------
TABLE_NAME
-------------------
COLUMN_NAME
-------------------
PK_DEPT
DEPARTMENT
DNO
PK_EMP
EMPLOYEE
ENO
- 인덱스 생성
create index idx_emp_ename on employee(ename);
SELECT index_name, table_name, column_name from user_ind_columns where table_name in('EMPLOYEE','DEPARTMENT');
INDEX_NAME
----------------------
TABLE_NAME
----------------------
COLUMN_NAME
----------------------
PK_DEPT
DEPARTMENT
DNO
IDX_EMP_ENAME
EMPLOYEE
ENAME
PK_EMP
EMPLOYEE
ENO
- 인덱스 삭제
drop index 인덱스명;
- 고유 인덱스 : 중복값 비허용
CREATE UNIQUE INDEX 인덱스명 ON 테이블명 (컬럼1,..)
cf. 비고유 인덱스
- 결합 인덱스 : 두개 이상의 컬럼으로 구성된 인덱스
CREATE INDEX 인덱스명 ON 테이블명 (컬럼1,컬럼2,...);
cf. 단일 인덱스
create index idx_dept_com on dept_second(dname, loc);
- 함수 기반 인덱스 : 수식/함수 적용해 만든 인덱스
create index idx_emp_totasal on employee(salary*12);
select ename, salary, salary*12 연봉 from employee where salary*12>16000;
ENAME SALARY 연봉
-------------------- ---------- ----------
TURNER 1500 18000
ALLEN 1600 19200
CLARK 2450 29400
BLAKE 2850 34200
JONES 2975 35700
SCOTT 3000 36000
FORD 3000 36000
KING 5000 60000
권한
권한 관련 작업 => 시스템 계정에서 실행 (관리자 계정 - dba 권한 모두 갖고 있음)
- 권한 부여
GRANT 권한(SELECT~DELETE) ON 계정이름.테이블 TO (권한부여할)계정이름;
grant select, insert, update, delete on hr.employee to mydb2;
//mydb2 계정에 hr 계정의 employee 테이블 SIUD할 권한 부여
=> mydb2 계정
select * from hr.employee; //employee 테이블 조회 가능
- 권한 취소
revoke insert, update, delete on hr.employee from mydb2;
//mydb2 계정의 hr계정 employee 테이블에 대한 IUD 권한 취소
- 세션 권한 : 데이터베이스 연결 권한
- 사용자 생성, db 연결 권한 부여
alter session set "_ORACLE_SCRIPT"=true;
create user userdb identified by 1234;
grant create session to userdb; //세션 연결 권한 부여
grant create table to userdb; //테이블 생성 권한 부여
※ show user; //연결된 계정 확인
※ alter user mydb2 identified by newPass; //비밀번호 변경
- 모든 사용자 계정에 권한 부여
grant select on hr.employee to public;
동의어
: 데이터베이스 객체 별칭
CREATE SYNONYM 시노님명 FOR 객체명;
- 동의어 생성 권한 부여
conn system/9511
CREATE SYNONYM syn_emp FOR employee;
- 동의어 생성
conn userdb/1234
create synonym syn_emp for hr.employee;
select * from syn_emp; //=>employee 테이블 출력됨
- 동의어 삭제
drop synonym syn_emp;
PL/SQL (Procedural Language extension to SQL)
: 프로그래밍 언어의 특성을 수용하여 SQL을 확장한 절차적 언어
(SQL에서는 사용 불가한 절차적 프로그래밍 기능 가짐)
=> 관계형 데이터베이스에서 사용되는 Oracle의 표준 데이터 엑세스 언어
=> 프로시저 생성자를 SQL과 완벽하게 통합
※ 네트워크 연결 오류 시 호스트 이름 PC 이름으로 대체
'Programming > 국비학원' 카테고리의 다른 글
220915 - PL/SQL - 커서, 함수, 프로시저 (0) | 2022.09.16 |
---|---|
220914 - PL/SQL - 제어문, 커서 (0) | 2022.09.15 |
220906 - 오라클 - MERGE문, 뷰 (0) | 2022.09.07 |
220905 - 오라클 - 데이터 정의어, 데이터 조작어, 트랜잭션 (0) | 2022.09.06 |
220902 - 오라클 - 셀프 조인, 서브 쿼리, 다중행 서브쿼리 (0) | 2022.09.03 |