정보처리기사/[수제비] 정보처리기사 실기

VII. SQL 응용_01. 데이터베이스 기초

web_seul 2023. 3. 17. 17:57
반응형

1) 트랜잭션(Transaction) : 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본단위

트랜잭션의 특성

ACID : Atomicity(원자성) - Consistency(일관성) - Isolation(격리성) - Durability(영속성) 

Atomicity, 원자성 트랜잭션을 구성하는 연산 전체가 모두 정상적으로 실행되거나 모두 취소되어야 하는 성질
트랜잭션의 연산 전체가 성공 또는 실패(All or Nothing)되어야 하는 성질
Consistency, 일관성 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 하는 성질
Isolation, 격리성 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 한다는 성질
Durability, 영속성 성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장되어야 하는 성질

 

트랜잭션의 상태변화 : 활부완실철 / 활동(Active) - 부분완료(Partially Committed) - 완료(Committed) - 실패(Failed) - 철회(Aborted)

 

트랜잭션 제어언어(TCL, Transaction Control Language) : 트랜잭션의 결과를 허용, 취소의 목적으로 사용되는 언어

TCL 명령어 : 커롤체 / 커밋(Commit, 확정) - 롤백(Rollback, 취소) - 체크포인트(Checkpoint, Savepoint, 저장시기 설정)

 

병행제어(Concurency Control) : 다수 사용자 환경에서 여러 트랜잭션을 수행할 때 데이터베이스 일관성 유지를 위해 상호작용을 제어하는 기법

 

병행제어 미보장시 문제점 : 갱현모연 / 갱신손실(lost update) - 현황파악 오류(dirty read) - 모순성(inconsistancy) - 연쇄복귀(cascade rollback)

 

병행제어 기법 : 로낙타다 / 로킹(locking) - 낙관적 검증(validation) - 타임스탬프 순서(timestamp ordering) - 다중버전 동시성 제어(MVCC)

 - 로킹 : 하나의 트랜잭션이 실행하는 동안 특정 데이터 항목에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 상호배제 기능을 제공하는 기법, 트랜잭션의 순차적 진행을 보장하는 직렬화 기법 / 데이터베이스, 파일, 레코드 등이 로킹 단위가 될 수 있음, 로킹 단위(한번에 로킹할 수 있는 객체의 크기)가 작아지면 로킹 오버헤드 증가

로킹단위가 크면 로크 수 적어짐 -> 제어기법 간단(병행성 ↓)
로킹단위가 작으면 로크 수 많아짐 -> 제어기법 복잡(병행성 ↑)

 - 낙관적 검증 : 트랜잭션이 어떠한 검증도 수행하지 않고 일단 트랜잭션을 수행하고 트랜잭션 종료시 검증을 수행하여 데이터베이스에 반영하는 기법

① 읽기(read) ② 검증(validation) ③ 쓰기(write)

 - 타임스탬프 순서 : 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 타임스탬프를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법

 - 다중버전 동시성 제어 : 트랜잭션의 타임스탬프와 접근하려는 데이터의 타임스탬프를 비교하여 직렬가능성이 보장되는 적절한 버전을 선택하여 접근하도록하는 기법

 

고립화 수준 : 고립화 수준은 다른 트랜잭션이 현재의 데이터에 대한 무결성을 해치지 않기위해 잠금을 설정하는 정도 

고립화 수준 종류 : RRRS / Read uncommitted(동시성 ↑) < Read committed < Repeatable read < Serializable read(고립성 ↑)

  Dirty Read Non-Repeatable
Read
Phantom Read
Read uncommitted 한 트랜잭션에서 연산(갱신)중인(아직 커밋되지않은) 데이터를 다른 트랜잭션이 읽는 것을 허용하는 수준 O O O
Read committed 한 트랜잭션에서 연산(갱신)을 수행할 때,
연산이 완료될때까지 연산 대상 데이터에 대한 읽기를 제한하는 수준
X O O
Repeatable read 선행 트랜잭션이 특정 데이터를 읽을 때, 트랜잭션 종료시까지 해당 데이터에 대한 갱신 삭제를 제한하는 수준 X X O
Serializable read 선행 트랜잭션이 특정 데이터 영역을 순차적으로 읽을 때, 해당 데이터 영역 전체에 대한 접근 제한 수준 X X X

 

회복기법 : 트랜잭션 수행도중 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업

회로체크 / 회복기법 = 로그기반 회복기법, 체크포인트 회복기법, 그림자페이징 회복기법

 

REDO : 데이터베이스의 비정상 종료시 디스크에 저장된 로그를 분석하여 트랜잭션의 시작과 완료에 대한 기록이 있는 트랜잭션들의 작업을 재작업하는 기법, 데이터베이스 내용 자체가 손상된 경우 가장 최근의 복제본을 적재한 후 일어난 변경만을 로그를 이용하여 재실행함으로써 데이터베이스를 복원하는 기법 

UNDO : 데이터베이스의 비정상 종료시 디스크에 저장된 로그를 분석하여 트랜잭션의 시작은 있지만 완료기록이 없는 트랜잭션들이 작업한 변경 내용들을 모두 취소하는 기법, 데이터베이스 내용 자체는 손상되지 않았지만 변경중이거나 변경된 내용에 대한 신뢰성이 상실된 경우 모든 변경내용을 취소하여 복원하는 기법

 

 - 로그기반 회복기법

지연 갱신(Deferred Update) 트랜잭션이 완료되기 전까지 데이터베이스에 기록하지 않는 기법
즉시 갱신(Immediate Update) 트랜잭션 수행중 갱신 결과를 바로 DB에 반영하는 기법

 - 체크포인트 회복기법 : 장애발생시 검사점 이후에 처리된 트랜잭션에 대해서 장애 발생이전의 상태로 복원시키는 회복기법

 - 그림자 페이징 회복기법 : 데이터베이스 트랜잭션 수행시 복제본을 생성하여 데이터베이스 장애시 이를 이용해 복구하는 기법

 

SQL 문법 : 데이터베이스를 접근하고 조작하는데 필요한 표준 언어를 활용할 수 있게 해주는 규칙

데이터 정의(DDL) 데이터를 정의하는 언어
테이블이나 관계구조 생성시 사용
 CREATE, ALTER, DROP, TRUNCATE 
데이터 조작어(DML) 데이터베이스에 저장된 자료들을 입력, 수정, 삭제, 조회하는 언어, 질의어(Query)라고 부름
 SELECT, INSERTM UPDATE, DELETE 
데이터 제어어(DCL) 데이터베이스 관리자가 데이터 보안, 무결성 유지, 병행제어, 회복을 위해 DBA가 사용하는 제어용 언어
GRANT, REVOKE

 

2) DDL : 데이터를 정의하는 언어 '데이터를 담는 그릇을 정의하는 언어'

DDL의 대상 :  도메인, 스키마, 테이블, 뷰, 인덱스 

도메인 하나의 속성이 가질수 있는 원자값들의 집합
스키마 데이터베이스의 구조, 제약조건 등의 정보를 담고있는 기본적인 구조
외부, 개념, 내부 스키마
외부 스키마 사용자나 개발자의 관점에서 필요로하는 데이터베이스의 논리적 구조
사용자 뷰를 나타냄
개념 스키마 데이터베이스의 전체적인 논리적 구조
전체적인 뷰를 나타냄
개체간의 관계, 제약조건, 접근 권한, 무결성, 보안에 대해 정의
내부 스키마 물리적 저장장치의 관점에서 보는 데이터베이스 구조
실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현방법, 내부 레코드의 물리적 순서 등을 표현 
테이블 데이터 저장 공간
하나 이상의 물리 테이블에서 유도되는 가상의 테이블
인덱스(색인) 검색을 빠르게 하기위한 데이터 구조

 

테이블 : 데이터를 저장하는 항목인 필드(Field)들로 구성된 데이터의 집합체 = column(field) + row(field)

테이블 구성조건 : 테이블에 포함된 행은 중복x, 순서x / 열은 중복o, 순서x

튜플/행 테이블 내의 행, 레코드(Record)라고도 함
릴레이션에서 같은 값을 가질 수 없음
애트리뷰트/열 테이블 내의 열을 의미, 열의 개수를 디그리(Degree)라고 함
식별자 여러개의 집합체를 담고있는 관계형 데이터베이스에서 각각의 구분할 수 있는 논리적 개념
카디널리티 튜플(Tuple)의 개수
차수 애트리뷰트(Attribute)의 개수
도메인 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자값들의 집합

 

뷰(View) : 논리테이블로 사용자에게(생성관점이 아닌 사용관점에서) 테이블과 동일

특징 : 논리적 데이터 독립성 제공, 데이터 조작 연산 간소화, 보안기능(접근제어) 제공, 뷰 변경 불가

목적 : 단순 질의어 사용가능, FROM절에 있는 하나의 뷰를 통해 뷰를 구성하는 테이블 대체 가능, 테이블의 중요 데이터 일부만 제공할 수 있는 장단점이 있음

테이블 A 그대로 CREATE VIEW VW_A AS
SELECT *
FROM A
테이블 A 일부컬럼 CREATE VIEW VW_B AS
SELECT 컬럼1, 컬럼2
FROM A;
테이블 A와 테이블 B 조인결과 CREATE VIEW VW_C AS
SELECT *
FROM A, B
WHERE A.컬럼1=B.컬럼2

삭제/변경 : 뷰 정의 자체를 변경하는 것은 불가능, 뷰 이름이나 쿼리문을 변경하는 수단x, 뷰 삭제와 재생성을 통해 뷰에 대한 정의 변경 가능, 뷰를 통해 접근 가능한 데이터에 대한 변경 가능(일부 제약 존재)

DROP VIEW 뷰이름

 

데이터베이스 파일구조

순차 방법 레코드들의 물리적 순서가 논리적 순서와 같게 순차적으로 저장하는 방법
인덱스 방법 인덱스가 가리키는 주소를 따라 원하는 레코드에 접근가능하도록 하는 방법
<키값, 주소>의 쌍으로 구성
해싱 방법 키값을 해시함수에 대입시켜 계산한 결과를 주소로 사용하여 레코드에 접근가능하게 하는 방법

 

인덱스 : 검색 연산의 최적화를 위해 데이터베이스 내 값에 대한 주소 정보로 구성된 데이터 구조

인덱스 종류

순서 인덱스 데이터가 정렬된 순서로 생성되는 인덱스
해시 인덱스 해시 함수에 의해 직접 데이터에 키 값으로 접근하는 인덱스
비트맵 인덱스 각 컬럼에 적은 개수 값이 저장된 경우 선택하는 인덱스
함수기반 인덱스 수식이나 함수를 적용하여 만든 인덱스
단일 인덱스 하나의 컬럼으로만 구성한 인덱스
결합 인덱스 두개 이상의 컬럼으로 구성한 인덱스
클러스터드 인덱스 기본키(PK) 기준으로 레코드를 묶어서 저장하는 인덱스

인덱스 생성

CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명);
[UNIQUE] 인덱스 걸린 컬럼에 중복 값을 허용하지 않음(생략 가능)
인덱스명 생성하고자 하는 인덱스 테이블명
테이블명 인덱스 대상 테이블명
컬럼명 테이블의 특정 컬럼명(복수컬럼 지정 가능)

인덱스 삭제

DROP INDEX 인덱스명;

 

인덱스 변경

ALTER [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명);

 

인덱스 스캔 방식

인덱스 범위 스캔 인덱스 루트 블록에서 리프 블록까지 수직적으로 탐색한 후에 리프 블록을 필요한 범위만 스캔하는 방식
인덱스 전체 스캔 수직적 탐색없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식
인덱스 단일 스캔 수직적 탐색만으로 데이터를 찾는 스캔방식
인덱스 생략 스캔 선두 컬럼이 조건 절에 빠졋어도 인덱스를 활용하는 스캔방식

 

DDL 명령어 :  CREATE, ALTER, DROP, TRUNCATE 

(1) CREATE

//CREATE 명령
CREATE TABLE 테이블명
(
  속성명 데이터타입 [NOT NULL], _,
  PRIMARY KEY(기본키),
  UNIQUE(속성명, ...),
  FOREIGN KEY(외래키) PEFERENCES 참조테이블(기본키),
  CONSTRAINT 제약조건명 CHECK(조건식),
)
PRIMARY KEY 테이블의 기본키 정의, 유일하게 테이블의 각 행 식별
FOREIGN KEY 외래키 정의, 참조 대상을 테이블(컬럼명)로 명시
열과 참조된 테이블의 열 사이의 외래키 관계를 적용하고 설정
UNIQUE 테이블내에서 얻은 유일한 값을 갖도록 하는 속성
NOT NULL 해당 컬럼은 NULL값을 포함하지 않도록 하는 속성
CHECK 개발자가 정의하는 제약조건, 참(TRUE)이어야 하는 조건 지정
DEFAULT 해당 필드의 기본값 설정

 

(2) ALTER : 컬럼 추가, 컬럼 수정, 컬럼 삭제, 컬럼명 수정

ex) ALTER TABLE 사원 ADD 나이 INTEGER DEFAULT 20;

컬럼 추가 ALTER TABLE 테이블명 ADD 컬럼명 데이터_타입;
컬럼 수정 ALTER TABLE 테이블명 MODIFY 컬럼명 데이터_타입 [DEFAULT값][NOT NULL];
컬럼 삭제 ALTER TABLE 테이블명 DROP 컬럼명;
컬럼명 수정 ALTER TABLE 테이블명 RENAME COLUMN 변경전_컬럼명 TO 변경후_컬럼명;

 

(3) DROP : 테이블 삭제

ex) DROP TABLE 테이블명 [CASCADE | RESTRICT]

CASCADE : 참조하는 테이블까지 연쇄적으로 제거하는 옵션

RESTRICT : 다른 테이블이 삭제할 테이블을 참조중이면 제거하지 않는 옵션

 

(4) TRUNCATE : 테이블내의 데이터들을 삭제

ex) TRUNCATE TABLE 사원;

 

VIEW : VIEW - AS 

(1) CREATE VIEW : 뷰 생성

CREATE VIEW 뷰이름 AS
조회쿼리;
//사원 테이블에 사번, 업무, 이름, 생년월일, 성별, 입사일 컬럼의 뷰 테이블 작성
CREATE VIEW 사원뷰 AS
SELECT 사번, 이름
FROM 사원
WHERE 성별 = 'M'

 

(2) CREATE OR REPLACE VIEW : 뷰 교체

CREATE OR REPLACE VIEW 뷰이름 AS
조회쿼리;

 

(3) DROP VIEW

DROP VIEW 뷰이름;

 

인덱스 DDL : INDEX - ON

CREATE INDEX 인덱스 생성 명령
UNIQUE 생략 가능, 인덱스 걸린 컬럼에 중복값 허용x
복수 컬럼을 인덱스로 가능
CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ..);
ex) CREATE INDEX 사번인덱스 ON 사원(사번);
ALTER INDEX 인덱스 수정 명령
일부 DBMS는 ALTER INDEX 제공x
기존 인덱스 삭제 + 신규 인덱스 생성으로 사용 권고
ALTER[UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ..);
ex) ALTER INDEX 사번인덱스 ON 사원(사번);
DROP INDEX 인덱스 삭제 명령
DROP INDEX 인덱스명;
DROP INDEX 사번 인덱스;

 

3) DML : 데이터베이스에 저장된 자료들을 입력, 수정, 삭제, 조회하는 언어  SELECT-INSERT-UPDATE-DELETE 

(1) SELECT

SELECT 명령문 :  SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY 

SELECT * | {[DISTINCT] 출력할 컬럼명 | 표현식, ...}
FROM 검색할 테이블명;
[WHERE 조건들]
[ORDER BY {컬럼명, expr(표현식)} [ASC | DESC];

// | 또는
// [] 생략가능
// {} 문법 적용 범위(묶음)
// expression 표현식(사칙연산)
SELECT 검색하고자하는 속성명, 계산식
2개 이상의 테이블을 대상으로 검색할 때는 '테이블명.속성명'으로 표현
ALL 모든 튜플 검색시 사용
SELECT뒤에 명시하지 않을 경우 ALL로 인식(기본값)
DISTINCT 중복된 속성이 조회될 경우 그 중 한 개만 검색(SELECT 뒤에 명시된 속성이 중복될 경우 한 개만 검색)
DISTINCTROW SELECT 뒤에 속성들과 상관없이 튜플전체가 중복된 튜플 제거
FROM 질의에 의해 검색될 데이터들을 포함하는 테이블명 기술
WHERE 검색할 조건 기술
GROUP BY 속성값을 그룹으로 분류하고자할 때 사용
HAVING GROUP BY에 의해 분류한 후 그룹에 대한 조건 기술
ORDER BY 속성값을 정렬하고자할 때 사용
ASC와 DESC 생략시 오름차순 정렬
ASC 오름차순 정렬
DESC  내림차순 정렬

 

WHERE

- 조건이 상수인 경우 : 숫자그대로 입력하여 비교가능

SELECT 사원번호, 이름, 부서번호
FROM 사원
WHERE 부서번호 = 90

- 조건이 문자열인 경우 : ''로 감싸고 대소문자 구별함

SELECT 이름, 학번, 교실
FROM 학생
WHERE 이름 = 'Gildong'

- 조건이 날짜데이터인 경우 : ''로 감싸기

SELECT 이름
FROM 사원
WHERE 입사일 = '17-FEB-96'

// 월(FEB)은 대소문자 구분하지 않음
// 검색형식 중요 ex)DD/MM/YY 검색X
// 문자열 형식 중요 : DD-MM-YY

WHERE 조건

비교 =, <>, <, >, <=, >= ex) PRICE < 50000
* <>, !=, ^는 다름을 의미(not equal)
 
범위 BETWEEN ex) PRICE BETWEEN 50000 AND 80000 SELECT * FROM PRODUCT
WHERE PRICE BETWEEN 50000 AND 80000
집합 IN, NOT IN ex) PRICE IN(40000, 50000, 60000)
      가격이 40000 또는 50000 또는 60000
SELECT * FROM PRODUCT
WHERE PRICE IN(40000, 50000, 6000)
패턴 LIKE ex) NAME LIKE '정보%'
      이름이 '정보'로 시작되는 문자열
SELECT * FROM PRODUCT
WHERE NAME LIKE '정보%'

SELECT * FROM PRODUCT
NAME LIKE '[ABCD]%'
NULL IS NULL,
IS NOT NULL
ex) PRICE IS NULL
      가격이 NULL값인 경우
SELECT * FROM PRODUCT
WHERE PRICE IS NULL;
복합조건 AND, OR, NOT ex) (PRICE<50000) AND (NAME LIKE '정보%')
      가격이 50000미만이고 이름이 '정보'로
시작되는 문자열
 

LIKE와 함께 사용하는 와일드 문자

+ 문자열 연결 '축구'+'감독' = '축구 감독'
% 0개 이상의 문자열과 일치 LIKE '키워드%' : 키워드로 시작하는 문자열 검색
[] 1개의 문자와 일치 '[0-8]%' : 0-8 사이 숫자로 시작하는 문자열
[^] 1개의 문자와 불일치 '[^0-8]%' : 0-8 사이 숫자로 시작하지 않는 문자열
_ 특정 위치의 1개 문자와 일치 '_동%' : 두번째 위치에 '동'이 들어가는 문자열

 

* COUNT(*) : NULL포함 / COUNT(컬럼명) : NULL포함x

 

Join : 조인, 두개 이상의 테이블을 연결하여 데이터 검색, 두 릴레이션으로부터 관려된 튜플들을 결합하여 하나의 튜블로 만드는 가장 대표적인 데이터 연결 방법

내부 조인 Inner Join 공통 존재 컬럼의 값이 같은 경우 추출
외부 조인 Outer Join 왼쪽 외부조인(Left outer join), 오른쪽 외부조인(Right outer join), 완전 외부조인(Full outer join)
교차 조인 Cross Join 조인 조건이 없는 모든 데이터 조합 추출
셀프 조인 Self Join 자기 자신에게 별칭 지정 후 다시 조인
SELECT A.컬럼1, A.컬럼2, ..., B.컬럼1, B.컬럼2, ...
  FROM 테이블1 A[INNER] JOIN 테이블2 B ON 조인조건
[WHERE 검색조건];

 

서브쿼리 : SQL 문 안에 포함된 또 다른 SQL문

FROM절 서브쿼리 서브쿼리가 FROM절 안에 들어있는 형태
인라인 뷰(inline Views)라고 불림
뷰(View)처럼 결과가 동적으로 생성된 테이블 형태로 사용할 수 있음
WHERE절 서브쿼리 서브쿼리가 WHERE 절 안에 들어있는 형태
중첩 서브쿼리(Nested Sub-Query)라고도 불림

 

집합 연산자 : 두개 이상의 테이블에서 여러 개의 질의 결과를 연결하여 하나로 결합하는 연산자

UNION 중복 행이 제거된 쿼리 결과 집합
UNION ALL 중복 행이 제거되지 않은 쿼리 결과 집합
INTERSECT 두 쿼리 결과에 공통적으로 존재하는 집합
MINUS 첫 쿼리에 있고 두 번째 쿼리에는 없는 집합

 

(2) INSERT : 데이터 내용 삽입 명령어

INSERT INTO 테이블명(속성명1, ...)
VALUES(데이터1, ...);
속성과 데이터 개수, 데이터 타입이 일치해야함
속성명 생략가능
//[학생] 테이블에 학번 6677, 성명'장길산', 학년 3학년, 수강과목 '수학' 삽입하기

INSERT INTO 학생(학번, 성명, 학년, 학년, 수강과목)
VALUES(6677, '장길산', 3, '수학');

 

(3) UPDATE : 데이터 내용 변경 명령어

UPDATE 테이블명
  SET 속성명 = 데이터, ...
WHERE 조건;
UPDATE 명령문은 WHERE절을 통해 어떤 조건이 만족할 경우에만 특정 컬럼의 값을 수정하는 용도로 사용됨
//[학생]테이블에 장길산의 주소를 인천으로 수정

UPDATE 학생
  SET 주소 = '인천' 
WHERE 이름 = '장길산';

 

(4) DELETE : 데이터의 내용 삭제 명령어

DELETE FROM 테이블명
WHERE  조건;
모든 레코드를 삭제할 때는 WHERE절 없이 DELETE만 사용
레크드를 삭제해도 테이블 구조는 남아있어서 디스크에서 테이블을 완전히 삭제하는 DROP명령과는 다름
//[학생]테이블에 이름이 장길산에 대한 튜플 삭제

DELETE FROM 학생
WHERE 이름='장길산';

 

4) DCL : DB관리자가 데이터 보안, 무결성 유지, 병행제어, 회목을 위해 사용하는 언어

DCL GRANT 사용 권한 부여 관리자(DBA)가 사용자에게 데이터베이스에 대한 권한(DML) 부여
REVOKE 사용 권한 취소 관리자(DBA)가 사용자에게 부여했던 권한 회수
DCL/TCL COMMIT 트랜잭션 확정 데이터베이스 트랜잭션의 내용 업데이트 영구 확정
ROLLBACK 트랜잭션 취소 데이터베이스에서 업데이트 오류 발생시 이전 상태로 되돌림
SAVEPOINT
(=CHECK POINT)
저장시기 설정 트랜잭션의 특정 지점에 이름 지정, 그 지점 이전 수행작업에 영향없이 이후 수행작업 롤백

 

GRANT : 권한 부여

시스템 권한 GRANT 권한 TO 사용자; 관리자가 사용자에게 테이블, 뷰, 프로시저 등을 생성하고 삭제할 수 있는 권한 부여
객체 권한 GRANT 권한 ON 테이블 TO 사용자; 관리자가 사용자에게 테이블 수정, 삽입, 삭제, 조회와 프로시저 실행을 할 수 있는 권한 부여
//관리자가 사용자인 '장길산'에게 '학생'테이블에 대해 수정(UPDATE)할 수 있는 권한 부여
GRANT UPDATE ON 학생 TO 장길산;

 

REVOKE : 권한 회수

시스템 권한 REVOKE 권한 FROM 사용자; 관리자가 사용자에게 테이블, 뷰, 프로시저 등을 생성하고 삭제할 수 있는 권한 회수
객체 권한 REVOKE 권한 ON 테이블 FROM 사용자; 관리자가 사용자에게 테이블 수정, 삽입, 삭제, 조회와 프로시저 실행을 할 수 있는 권한 회수

 

반응형