데이터 사전 | 데이터베이스의 메모리/성능/사용자/권한/객체 등 데이터베이스의 중요한 데이터가 보관 오라클은 데이터 사전 정보에 직접 접근이 불가하다. 그래서 데이터 사전 뷰를 통해서만 정보 열람이 가능하다. |
사용자 테이블 | 데이터베이스를 통해 관리할 데이터를 저장하는 테이블 |
USER_XXXX | 데이터 사전 뷰, 현재 데이터베이스에 접속한 사용자가 소유한 객체 정보, |
ALL_XXXX | 현재 데이터베이스에 접속한 사용자가 소유한 객체 또는 다른 사용자가 소유한 객체 중 사용허가를 받은 객체, 즉 사용 가능한 모든 객체 정보 |
DBA_XXXX | 데이터베이스 관리를 위한 정보(데이터베이스 관리 권한을 가진 SYSTEM, SYS 사용자만 열람 가능) |
VS_XXXX | 데이터베이스 성능 관련 정보(X$_XXXX 테이블의 뷰) |
SELECT * FROM DICT; | SCOTT 계정에서 사용 가능한 데이터 사전 열람 |
SELECT * FROM DICTIONARY; | SCOTT 계정에서 사용 가능한 데이터 사전 열람 |
SELECT TABLE_NAME FROM USER_TABLES; |
SCOTT계정이 가지고 있는 객체 정보 살펴보기 |
SELECT OWNER, TABLE_NAME FROM ALL_TABLES; |
SCOTT계정이 사용할 수 있는 객체 정보 살펴보기 |
OWNER | 테이블을 소유한 사용자를 명시 |
TABLE_NAME | 테이블 이름 |
TABLESPACE_NAME | 테이블 스페이스 이름 |
NUM_ROWS | 테이블에 저장된 행 수 |
SELECT * FROM DBA_TABLES; | 데이터베이스 관리 권한을 가진 사용자만 조회할 수 있는 테이블이다. |
SELECT * FROM DBA_USERS; |
등록된 사용자 정보 열람 |
인덱스 | 데이터 검색 성능의 향상을 위해 테이블 열에 사용하는 객체 테이블에 보관된 특정 행 데이터의 주소를 목록으로 만든 것이다. |
SELECT * FROM USER_INDEXES; |
OWNER가 소유한 인덱스 정보 알아옴 |
SELECT * FROM USER_IND_COLUMNS; |
OWNER가 소유한 인덱스 컬럼 정보 알아옴 |
인덱ㄷ스는 사용자가 직접 특정 테이블의 열에 지정할 수 도 잇지만 열이 기본키 또는 고유키 일 경우 자동으로 생성된다. | |
CREATE INDEX 인덱스이름 ON 테이블이름(열이름1 ASC OR DESC, .... ); |
인덱스 생성 |
단일인덱스 | |
복합인덱스, 결합 인덱스 | 두 개 이상 열로 만들어지는 인덱스, WHERE절의 두 열이 AND 연산으로 묶이는 경우 |
고유 인덱스 | 열에 중복데이터가 없을 때 사용, UNIQUE 키워드를 지정하지 않으면 비 고유 인덱스가 기본값 CREATE UNIQUE INDEX 명시 |
함수 기반 인덱스 | 열에 산술식 같은 데이터 가공이 진행된 결과로 인덱스 생성 |
비트맵 인덱스 | 데이터의 종류가 적고 같은 데이터가 존재할 때 주로 사용 CREATE BITMAP INDEX 명시 |
DROP INDEX 인덱스 이름; | 인덱스 삭제 |
뷰(VIEW) | 가상 테이블, 하나 이상의 테이블을 조회하는 SELECT 문을 저장한 객체 SELECT 문을 저장하기 때문에 물리적 데이터를 따로 저장하지는 않지만 ,특정 테이블 조회가 가능하다. |
뷰의 사용 목적 | 편리성, 보안성 |
grant create view to scott; | soctt 계정에 뷰 생성 권한 (명령 프롬프트 창에서 가능) |
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰이름 (열이름1, 열이름 2, ...) AS (지정할 SELECT 문) [WITH 초다 OPTION [CONSTRAINT 제약조건]] [WITH READ ONLY [CONSTRAINT 제약 조건]]; |
OR REPLACE : 같은 이름의 뷰가 이미 존재할 경우에 현재 생성할 뷰로 대체하여 생성(선택) FORCE : 뷰가 저장할 SELECT문의 기반 테이블이 존재하지 않아도 강제로 생성(선택) NOFORCE : 뷰가 저장할 SELECT문의 기반 테이블이 존재할 경우에만 생성(기본값)(선택) WITH CHECK OPTION : 지정한 제약 조건을 만족하는 데이터에 한해 DML 작업이 가능하도록 뷰 생성(선택) WITH READ ONLY : 뷰의 열람, 즉 SELECT만 가능하도록 뷰 생성(선택) |
SELECT * FROM USER_VIEWS |
유저가 생성한 뷰 확인 |
DROP VIEW 뷰이름 | 뷰 삭제 |
인라인 뷰 | CREATE문을 통해 객체로 만들어지는 뷰 외에 SQL문에서 일회성으로 만들어서 사용하는 뷰 SELECT문에서 사용되는 서브쿼리, WITH절에서 미리 이름을 정의해두고 사용하는 SELECT문이 이에 해당한다. |
ROWNUM | 의사 열이라고 하는 특수열이다. 의사 열은 데이터가 저장되는 실제 테이블에 존재하지는 않지만 특정 목적을 위해 테이블에 저장되어 있는 열처럼 사용 가능한 열이다. ORDER BY로 다른 열을 정렬해도 ROWNUM은 유지된다. 때문에 ORDER BY 기준으로 ROWNUM을 출력하려면 인라인뷰를 적용해야 한다. |
SELECT ROWNUM, E.* FROM (SELECT * FROM EMP E ORDER BY SAL DESC)E; |
인라인뷰를 사용해 ROWNUM 출력 |
WITH E AS (SELECT * FROM EMP ORDER BY SAL DESC) SELECT ROWNUM, E.* FROM E; |
인라인뷰를 사용해 ROWNUM 출력 |
SELECT ROWNUM, E.* FROM (SELECT * FROM EMP E ORDER BY SAL DESC)E WHERE ROWNUM <= 3; |
TOP-N, 인라인뷰를 활용해 , 마지막에 조건을 붙여줘 원하는 데이터를 뽑을 수 있다. |
시퀀스 | 시퀀스는 오라클 데이터베이스에서 특정 규칙에 맞는 연속 숫자를 생성하는 객체이다. 새로운 번호를 만드는 경우 MAX(NUM)+1을 사용하면 된다. |
CREATE SEQUENCE 시퀀스 이름--1 [INCREMENT BY n]--2 [START WITH n]--3 [MAXVALUE n | NOMAXVALUE]--4 [MINVALUE n | NOMINVALUE]--5 [CYCLE | NOCYCLE]--6 [CACHE n | NOCACHE]--7 |
1 : 생성할 시퀀스 이름 지정, 아래 절을 지정하지 않을 경우 1부터 시작하여 1만큼 계속 증가하는 시퀀스가 생성(필수) 2 : 시퀀스에서 생성할 번호의 증가 (기본값은 1)(선택) 3 : 시퀀스에서 생성할 번호의 시작 값(기본값은 1)(선택) 4 : 시퀀스에서 생성할 번호의 최대값 지정, 최댓값은 시작값(START WITH)이상, 최솟값(MINVALUE)을 초괏값으로 지정, NOMAXVALUE로 지정하였을 경우 오름차순이면 1, 내림차순이면 10^26으로 설정(선택) 5 : 시퀀스에서 생성할 번호의 최솟값 지정, 최솟값은 시작값 이하, 최대값 미만 값으로 지정, NOMAXVALUE로 지정하였을 경우 오름 차순이면 1, 내림차순이면 10^26으로 설정(선택) 6 : 시퀀스에서 생성한 번호가 최대값에 도달했을 경우 CYCLE이면 시작값에서 다시 시작, NOCYCLE이면 번호 생성이 중단되고, 추가 번호 생성을 요청하면 오류 발생(선택) 7 : 시퀀스가 생성할 번호를 메모리에 미리 할당해 놓은 수를 지정, NOCACHE는 미리 생성하지 않도록 설정, 옵션을 모두 생략하면 기본값은 20(선택) |
SELECT * FROM user_sequences; | 생성한 시퀀스 확인 |
시퀀스이름.NEXTVAL | 다음 번호를 생성 |
시퀀스이름.CURRVAL | 시퀀스에서 마지막으로 생성한 번호조회 |
ALTER SEQUENCE 시퀀스 이름 [INCREMENT BY n] [START WITH n] [MAXVALUE n | NOMAXVALUE] [MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE] [CACHE n | NOCACHE] |
시퀀스 수정 |
DROP SEQUENCE 시퀀스이름 | 시퀀스 삭제 |
동의어 | 테이블, 뷰, 시퀀스 등 객체 이름 대신 사용할 수 있는 다른 이름을 부여하는 객체 주로 테이블 이름이 너무 길어 사용이 불편할 때 좀 더 간단하고 ᄍᆞᆲ은 이름을 하나 더 만들어줌. |
CREATE [PULBIC] SYNONYM 동의어 이름 FOR [사용자.][객체이름]; |
동의어 생성 PUBLIC : 동의어를 데이터베이스 내 모든 사용자가 사용할 수 있도록 설정, 생략할 경우 동의어를 생성한 사용자만 사용 가능(PUBLIC으로 생성되어도 본래 객체의 사용 권한이 있어야 사용 가능)(선택) 동의어 이름 : 생성할 동의어 이름(필수) 사용자. : 생성할 동의어의 본래 객체 소유 사용자를 지정, 생략할 경우 현재 접속한 사용자로 지정(선택) 객체 이름 : 동의어를 생성할 대상 객체 이름(필수) 생성한 동의어들은 CRUD SQL문을 사용할 수 있다. 테이블 별칭과 유사하지만 , 데이터베이스에 저장되는 객체여서 일회성이 아니다. |
DROP SYNONYM 동의어이름 | 동의어 삭제 |
제약조건 | 제약조건은 테이블의 특정 열에 지정이 가능하다. 제약 조건에 부합하지 않는 데이터는 저장이 불가하다. |
NOT NULL | 지정한 열에 NULL을 허용하지 않는다. NULL을 제외한 데이터의 중복은 허용된다. |
UNIQUE | 지정한 열이 유일한 값을 가져야 한다. 즉 중복될 수 없다. 단 NULL은 값의 중복에서 제외된다. |
PRIMARY KEY | 지정한 열이 유일한 값이면서 NULL을 허용하지 않는다. PRIMARY KEY는 테이블에 하나만 지정이 가능하다. |
FOREIGN KEY | 다른 테이블의 열을 참조하여 존재하는 값만 입력할 수 있다. |
CHECK | 설정한 조건식을 만족하는 데이터만 입력이 가능하다. |
데이터 무결성 | 데이터베이스에 저장되는 데이터의 정확성과 일관성을 보장 |
영역 무결성 | 열에 저장되는 값의 적정 여부를 확인. 자료형, 적절한 형식의 데이터, NULL여부같은 정해 놓은 범위를 만족하는 데이터임을 규정 |
개체 무결성 | 테이블 데이터를 유일하게 식별할 수 있는 기본키는 반드시 값을 가지고 있어야 하며 NULL이 될 수 없고 중복될 수도 없음을 규정 |
참조 무결성 | 참조 테이블의 외래키 값은 참조 테이블의 기본키로서 존재해야 하며 NULL이 가능 |
SELECT OWNER, CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME FROM USER_CONSTRAINTS; |
제약 조건 확인 OWNER : 제약 조건 소유 계정 CONSTRAINT_NAME : 제약 조건 이름(직접 지정하지 않을 경우 오라클이 자동으로 지정함 CONSTRAINT_TYPE : 제약 조건 종류 C : CHECK, NOT NULL U : UNIQUE P : PRIMARY KEY R : FOREIGN KEY TABLE_NAME : 제약조건을 지정한 테이블 이름 |
열이름 자료형 CONSTRAINT 제약조건 이름 제약조건 | 제약 조건 이름 직접 지정 |
ALTER TABLE 테이블이름 MODIFY(열이름 제약조건); |
이미 생성한 테이블에 제약 조건 추가 |
ALTER TABLE 테이블이름 MODIFY(열이름 CONSTRAINT 제약조건 이름 제약조건); |
제약 조건에 이름 지정해서 추가 |
ALTER TABLE 테이블이름 RENAME CONSTRAINT 기존제약 조건 이름 TO 새로운 제약 조건 이름 |
이미 생성된 제약조건 이름 변경 |
ALTER TABLE 테이블 이름 DROP CONSTRAINT 제약조건이름 |
제약 조건 삭제 |
CREATE TABLE 테이블이름( (다른열 정의), 열 자료형 CONSTRAINT [제약 조건 이름] REFERENCES 참조 테이블(참조 열) |
FOREIGN KEY 지정 |
CONSTRAINT [제약 조건 이름] REFERENCES 참조 테이블(참조열) ON DELETE CASCADE | 열 데이터를 삭제할 때 이 데이터를 참조하고 있는 데이터도 삭제 |
CONSTRAINT [제약 조건 이름] REFERENCES 참조 테이블(참조열) ON DELETE SET NULL | 열 데이터를 삭제할 때 이 데이터를 참조하는 데이터를 NULL로 수정 |
열이름 열자료형 DEFAULT 기본값 | 특정 열에 저장할 값이 지정되지 않았을 때 기본값을 지정 |
ALTER TABLE 테이블이름 DISABLE [NOVALIDATE/VALIDATE(선택)] CONSTRAINT 제약조건이름; |
제약조건 비활성화 |
ALTER TABLE 테이블이름 ENABLE [NOVALIDATE/VALIDATE(선택)] CONSTRAINT 제약조건이름; |
제약조건 활성화 |
'Back-end' 카테고리의 다른 글
서블릿(Servlet) (0) | 2021.08.08 |
---|---|
웹 프로그래밍 (0) | 2021.08.07 |
SQL문법 (3) (0) | 2021.07.25 |
Springboot 동작원리 (0) | 2021.07.19 |
JPA 개념 (0) | 2021.07.18 |