[SQL 개발자] 2) SQL 기본 - 자격증 시험 요약
SQL 개발자 시험 과목
과목 | 과목별 세부 항목 | 문항수 | 배점 |
데이터 모델링의 이해 | 데이터 모델링의 이해 | 10 | 20(문항당 2점) |
데이터 모델과 성능 | |||
SQL 기본 및 활용 | SQL 기본 | 40 | 80(문항당 2점) 주관식(8) |
SQL 활용 | |||
SQL 최적화 기본 원리 |
- 검정 시간 90분(1시간 30분)
- 합격 기준 : 총점 60점 이상(과목별 40% 미만 과락)
- 50문제 중 30문제 맞추면 합격
- 20문제를 틀리면 합격. 포기할 부분은 포기(?)
지난번 “[SQL 개발자] 데이터 모델링의 이해 자격증 시험 요약”에 이러 SQL 기본에 대해 요약을 해보았습니다.
아래 내용은 SQL 개발자 자격증에 대한 서적 중 [이기적 SQL 개발자]를 참고하여 요약을 하였습니다.
1. 관계형 데이터베이스(Relation Database)
1.1 데이터베이스의 종류
데이터를 어떠한 형태의 자료구조로 사용하느냐에 따라 분류
데이터베이스 | 설명 |
계층형 | - 트리(Tree) 구조로 데이터를 저장하고 관리 - 1:N 관계 형성 |
네트워크형 | - 오너(Owner)와 멤버(Member) 형태로 데이터를 저장 - 1:N, M:N 표현도 가능 하다. |
관계형 | - 릴레이션에 데이터를 저장하고 관리 한다. - 집합연산과 관계연산이 가능 하다. |
1) 집합 연산
집합 연산 | 설명 |
합집합(Union) | - 두 개의 릴레이션을 하나로 합치는것 - 중복된 행(튜플)은 한 번만 조회된다. |
차집합(Difference) | 본래 릴레이션에는 존재하고 다른 릴레이션에는 존재하지 않는것 조회 |
교집합(Intersection) | 두 개의 릴레이션 간에 공통된 것을 조회 |
곱집합( | 각 릴레이션에 존재하는 모든 데이터를 조합하여 연산 |
2) 관계 연산
관계 연산 | 설명 |
선택 연산(Selection) | 릴레이션에서 조건에 맞는 행(튜플)만을 조회 |
투영 연산(Projection) | 릴레이션에서 조건에 맞는 속성만을 조회 |
결합 연산(Join) | 여러 릴레이션의 공통된 속성을 사용해서 새로운 릴레이션을 만들어 낸다. |
나누기 연산(Division) | 기준 릴레이션에서 나누는 릴레이션이 가지고 있는 속성과 동일한 값을 가지는 행(튜플)을 추출하고 나누는 릴레이션의 속성을 삭제한 후 중복된 행을 제거하는 연산 |
3) 테이블(Table)의 구조
구성 요소 | 설명 |
기본키 (Primary key) | 하나의 테이블에서 유일성(Unique)과 최소성, Not Null을 만족하면서 해당 테이블을 대표하는 것 |
행 (Row) | 하나의 테이블에 저장되는 값으로 튜플(Tuple)이라고도 한다. |
칼럼 (Column) | 어떤 데이터를 저장하기 위한 필드(Field)로 속성이라고도 한다. |
외래키 (Foreign key) | - 다른 테이블의 기본키를 참조(조인)하는 칼럼 - 관계 연산 중에서 결합 연산(조인:Join)을 하기 위해서 사용 |
2. SQL(Structured Query Language) 종류
2.1 SQL(Structured Query Language) 종류
관계형 데이터베이스의 구조를 정의, 데이터 조작, 데이터 제어등을 할 수 있는 절차형 언어.
종류 | 설명 |
DDL : 데이터 정의어 (Data Definition Language) |
관계형 데이터베이스의 구조를 정의하는 언어 (CREATE, ALTER, DROP, RENAME, TRUNCATE) |
DML : 데이터 조작어 (Data Manipulation Language) |
테이블에 저장된 데이터를 조작(입력,수정,삭제,조회) 한다. (SELECT, INSERT, UPDATE, DELETE) |
DCL : 데이터 제어어 (Data Control Language) |
데이터베이스의 접근 권한을 부여, 제거하는 언어 (GRANT, REVOKE) |
TCL : 트랜잭션 제어어 (Transaction Control Language) |
DML문에 의한 변경사항을 관리(트랜잭션 제어) (COMMIT, ROLLBACK, SAVEPOINT) |
2.2 트랜잭션의 특성
특성 | 설명 |
원자성(Atomicity) | 트랜잭션에 포함된 명령들은 모두 수행되거나, 모두 수행 안되어야 한다. (All or Nothing) |
일관성(Consistancy) | - 트랜잭션 실행 결과로 테이터베이스의 상태가 모순되지 않아야 한다. - 트랜잭션 실행 후에도 일관성이 유지 되어야 한다. |
고립성(Isolation) | - 트랜잭션은 다른 트랜잭션과 독립적으로 실행되어야 한다. - 부분적인 실행 결과를 다른 트랜잭션이 볼 수 없다. |
지속성(Durability) | 트랜잭션의 결과는 반드시 데이터베이스에 반영되어야 한다. |
2.3 sql 실행순서
순서 | 설명 |
파싱(Parsing) | - SQL문의 문법 확인과 SQL 서버가 이해할 수 있는 단위들로 분해. - 분해, 분석된 SQL문을 Library Cache에 저장 |
실행(Execution) | Optimizer가 수립한 실행 계획에 따라 SQL 실행 |
추출(Fetch), 인출 | 실행 결과의 데이터를 읽어서 전송한다. |
3. DDL(Data Definition Language) : 관계형 데이터베이스의 구조를 정의하는 언어.
Table 관련 SQL 문
1) Table 생성 : Create Table [Table 명] ( Column 정보, ...); 2) Table 변경 : Alter Table - Table 명 변경 - Column 변경 3) Table 삭제 : Drop Table 4) View 생성 : Create View 5) View 삭제 : Drop View |
Column 관련 SQL 문
1) Column 추가 : Alter Table ~ Add 2) Column 명 변경 : Alter Table ~ Rename Column ~ To 3) Column Type 변경 : Alter Table ~ Modify 4) Column 삭제 : Alter Table ~ Drop Column |
3.1 Table 생성
Table 생성문의 구조
Create Table 문 |
설명 |
Create Table | Create Table [Table 명] ( Column 설정, ); |
Column 정보 | - Column 명 - Data Type - 기본 값(Default) |
Data Type | - Char : 고정된 크기의 문자 데이터 - Varchar2 : 가변길이의 문자열 데이터 - Number : 숫자 데이터 - Date : 날짜 데이터 |
기본키 | - Column 명 옆에 primary key로 설정 - Constraint로 설정 |
Table 생성문을 이용하여 DEPT와 EMP 테이블을 생성하는 명령어 예제.
Create Table DEPT ( deptno char(4) primary key, deptname varchar2(20) ); Create Table EMP ( empno number(10), ename varchar2(20), sal number(10, 2) default 0, deptno char(4) not null, createdate date default sysdate, constraint emppk primary key(empno), constraint deptfk foreign key(deptno) references dept(deptno) ON DELETE CASCADE ); |
3.2 Table 변경
Table 명을 변경하는 명령어
ALTER TABLE [old table 명] RENAME TO [new table 명]; |
ALTER TABLE EMP RENAME TO NEWEMP;
3.3 Table 삭제
DROP TABLE [table 명]; |
CASCADE CONSTRAINT 옵션 : 외래키로 참조한 슬레이브 테이블과 관련된 사항도 삭제한다.
3.4 Column 관련
Table의 구성 요소인 column을 변경하는 명령어
1) Column 추가
ALTER TABLE [table 명] ADD (column 정보); |
ALTER TABLE emp ADD (age number(2) default 1);
2) Column 변경
ALTER TABLE [table 명] MODIFY (new column 정보); |
ALTER TABLE emp MODIFY (age number(3) default 0);
3) Column 명 변경
ALTER TABLE [table 명] RENAME COLUMN [old column 명] TO [new Column 명]; |
ALTER TABLE emp RENAME COLUMN age TO na2;
4) Column 삭제
ALTER TABLE [table 명] DROP COLUMN [삭제할 column 명]; |
ALTER TABLE emp DROP COLUMN na2;
3.5 View 생성
View는 Table 전체를 보여주기 싫거나 여러 개의 Table에서 필요한 column 정보만 추출 하여 사용할 때 생성하는 가상의 Table 이다.
CREATE VIEW [View 명] AS SELECT * FROM [table 명]; |
CREATE VIEW vemp AS SELECT * FROM emp;
3.6 View 삭제
DROP VIEW [View 명]; |
DROP VIEW vemp;
3.6 View의 특징
- 뷰가 참조한 테이블의 내용이 변경 되면, 뷰도 자동적으로 변경 된다. - 민감한 column은 공개하지 않아도 되므로 보안성을 향상 시킨다. - 뷰는 가상의 테이블로 원본 Table에 영향을 받으므로 입력, 수정, 삭제에는 제약이 있다. - 뷰는 Table로 생성된 것이 아니므로 Alter문을 사용하여 변경할 수 없다. - 뷰의 제거는 Drop문을 사용하여 삭제한다. 즉, 생성과 삭제만 가능 하다. |
4. DML(Data Manipulation Language) : 데이터 조작어
DDL에서 CREATE문으로 생성한 Table에 실제로 데이터를 입력하고 수정, 삭제, 조회 하는 명령어
1. Insert 문 : 테이블에 신규 데이트를 추가 한다. 2. Select 문 : 테이블에 들어있는 데이터를 조회 한다. 3. Update 문 : 테이블에 들어있는 데이터를 수정 한다. 4. Delete 문 : 테이블에 들어있는 데이터를 삭제 한다. |
4.1 Insert 문
INSERT INTO [table 명](column1, column2, ...) VALUES(expression1, expression2, ...); |
INSERT INTO DEPT(deptno, deptname) VALUES(‘0001’, ‘인사과’);
INSERT INTO DEPT(deptno, deptname) VALUES(‘0002’, ‘총무과’);
4.2 Select 문
SELECT * FROM [table 명]; SELECT column1, column2, ... FROM [table 명]; |
SELECT * FROM dept;
SELECT deptno, deptname FROM dept;
4.3 Update 문
UPDATE [table 명] SET column1 = expression1 , column2 = expression2 ... WHERE column1 = expression; |
UPDATE dept
SET deptname = ‘기획실’
WHERE deptno = ‘0001’;
4.4 Delete 문
DELETE FROM [table 명] WHERE column1 = expression1 column2 = expression2 ...; |
DELETE FROM dept
WHERE deptno = ‘0002’;
5. WHERE 문
프로그래밍 언어의 IF 문과 같은 조건 절에 해당하는 기능을 한다.
데이터를 조회, 수정, 삭제 하기 위한 선별 조건으로 사용된다.
5.1 연산자
- 비교 연산자
비교 연산자 | 설명 |
= (A = B) | A가 B와 같은 것 조회 |
< (A < B) | A가 B보다 작은 것 조회 |
<= (A <= B) | A가 B보다 작거나 같은 것 조회 |
> (A > B) | A가 B보다 큰 것 조회 |
>= (A >=B) | A가 B보다 크거나 같은 것 조회 |
- 부정 비교 연산자
부정 비교 연산자 | 설명 |
!= (A != B) | A와 B가 같지 않은 것 조회 |
^= (A ^= B) | A와 B가 같지 않은 것 조회 |
<> (A <> B) | A와 B가 같지 않은 것 조회 |
NOT [column 명] = (NOT A = B) | A와 B가 같지 않은 것 조회 |
NOT [column 명] > (NOT A > B) | A가 B 보다 크지 않은 것 조회 |
- 논리 연산자
논리 연산자 | 설명 |
AND (BL1 AND BL2) | 조건 B1과 조건 B2가 모두 참이어야 true |
OR B1 OR B2) | B1, B2 조건중 하나만 참이어도 true |
NOT (NOT B1) | B1 조건이 참이면 false, 거짓이면 true |
- SQL 연산자
SQL 연산자 | 설명 |
LIKE ‘%문자열%’ LIKE ‘_문자열_’ |
문자열을 포함하는 ‘%’ 위치의 모든 값 조회 문자열을 포함하고 ‘_’ 위치의 단일 문자 조회 |
BETWEEN A AND B | A와 B 사이의 값 조회 |
IN (list) | list와 일치하는 값(OR 조건) 조회 |
A IS NULL | A가 NULL 값 조회 |
- 부정 SQL 연산자
부정 SQL 연산자 | 설명 |
NOT BETWEEN A AND B | A와 B 사이에 해당하지 않는 값 |
NOT IN (list) | list와 일치하지 않는 값 조회 |
A IS NOT NULL | A가 NULL이 아닌 값 조회 |
5.2 LIKE 문
와일드 카드(%, _)를 이용하여 조회를 한다.
와일드 카드 | 설명 |
% | - 모든 것을 조회 한다. - ‘카%’ : ‘카’로 시작하는 모든 데이터 조회 - ‘%카’ : ‘카’로 끝나는 모든 데이터 조회 |
_(underscore) | - 한 개의 단일 문자를 대체 - ‘카_코딩’ : ‘_’에 한글자만 다른 모든 것 조회 |
5.3 BETWEEN AND 문
BETWEEN A AND B : A와 B 사이의 범위에 포함되는 값 조회
5.4 IN 문
IN (list) : list에 동일 값이 있으면 참인 조건.
5.5 NULL 관련 함수
IS NULL : Null 값 조회
IS NOT NULL : Null 아닌 값 조회
NULL 함수 | 설명 |
NVL(A, V1) | A가 NULL이면 V1 출력 |
NVL2(A, V1, V2) | A가 NULL이 아니면 V!, NULL 이면 V2 출력 |
NULLIF(A,exp1, exp2) | exp1과 exp2가 같으면 NULL, 다르면 exp1 출력 |
COALESCE(exp1, exp2, exp3, ...) | exp1부터 NULL이 아닌 첫번 째 값 출력 |
6. GROUP 연산
6.1 GROUP BY 문
Column에 동일한 값을 가진 행을 그룹화하여 합계, 평균, 최대값, 최소값 등을 계산 한다.
HAVING구를 이용하여 조건을 추가할 수 있다.
(예제는 Oracle HR 계정을 이용하여 테스트)
SQL> SELECT JOB_ID, SUM(SALARY) 2 FROM EMPLOYEES 3 GROUP BY JOB_ID; JOB_ID SUM(SALARY) -------------------- ----------- IT_PROG 28800 AC_MGR 12008 AC_ACCOUNT 8300 ST_MAN 36400 PU_MAN 11000 AD_ASST 4400 AD_VP 34000 SH_CLERK 64300 FI_ACCOUNT 39600 FI_MGR 12008 PU_CLERK 13900 |
Having을 사용하여 조건을 추가한 경우.
SQL> SELECT JOB_ID, SUM(SALARY) 2 FROM EMPLOYEES 3 GROUP BY JOB_ID 4 HAVING SUM(SALARY) > 10000; JOB_ID SUM(SALARY) -------------------- ----------- IT_PROG 28800 AC_MGR 12008 ST_MAN 36400 PU_MAN 11000 AD_VP 34000 SH_CLERK 64300 FI_ACCOUNT 39600 FI_MGR 12008 PU_CLERK 13900 SA_MAN 61000 MK_MAN 13000 |
HAVING과 WHERE를 같이 사용하면 먼저 WHERE에 의해 데이터들이 걸러지고 남은 데이터를 사용하여 GROUP BY와 HAVING이 진행 된다.
6.2 집계 함수 종류
집계함수 | 설명 |
COUNT() | 행 수를 조회한다. |
SUM() | 합계를 계산한다. |
AVG() | 평균을 계산한다. |
MAX()와 MIN() | 최대값과 최소값을 계산한다. |
STDDEV() | 표준편차를 계산한다. |
VARIAN() | 분산을 계산한다. |
SQL> SELECT COUNT(EMPLOYEE_ID), AVG(SALARY), MAX(SALARY), MIN(SALARY) 2 FROM EMPLOYEES; COUNT(EMPLOYEE_ID) AVG(SALARY) MAX(SALARY) MIN(SALARY) ------------------ ----------- ----------- ----------- 107 6461.83178 24000 2100 |
COUNT(*)는 NULL값을 포함한 모든 행의 수를 계산한다.
COUNT(칼럼명)은 NULL을 제외한 행 수를 계산한다.
6.3 SELECT 문 실행 순서
5 SELECT JOB_ID, SUM(SALARY) 1 FROM EMPLOYEES 2 WHERE SALARY > 5000 3 GROUP BY JOB_ID 4 HAVING SUM(SALARY) > 10000 6 ORDER BY SALARY; |
7. 명시적(Explicit) 형변환과 암시적(Implicit) 형변환
숫자와 문자열의 비교, 문자열과 날짜의 비교 등 데이터타입이 서로 같지않을 때 사용한다.
두 개의 데이터의 데이터 타입이 일치하도록 변환하는 것이다.
7.1 명시적(Explicit) 형변환
개발자가 SQL을 사용할 때 직접 형변환 함수를 사용해서 변환 한다.
[형변환 함수]
형변환 함수 | 설명 |
TO_NUMBER(문자열) | 문자열을 숫자로 변환한다. |
TO_CHAR(숫자, 날짜,[ FORMAT]) | 숫자 혹은 문자를 지정된 FORMAT문자로 변환한다. |
TO_DATE(문자열, FORMAT) | 문자열을 지정된 FORMAT의 날짜형으로 변환한다. |
7.2 암시적(Implicit) 형변환
개발자가 형변환을 하지 않은 경우 데이터베이스 관리시스템이 자동으로 형변환되는 것을 의미한다.
8. 내장형 함수
모든 데이터베이스 제품에는 제조사별로 조금씩 다르지만 비슷한 함수가 준비되어 사용자가 직접 구현하지 않고도 사용 가능하도록 되어 있다.
내장 함수는 형변환 함수, 문자열 함수, 숫자형 함수, 날짜형 함수 등이 있다.
8.1 문자열 함수
문자열 함수 | 설명 |
ASCII(문자) | 문자 또는 숫자를 입력 하여 아스키코드 값으로 반환 |
CAHR(아스키 코드값) | 아스키 코드값을 문자로 반환 |
SUBSTR(문자열, m, n) | 컬럼 또는 문자열, m번 위치부터, n개를 골라낸다 |
CONCAT(문자열1,문자열2) | 문자열1과 문자열2를 결합한다. ‘||’ 또는 ‘+’ |
LOWER(문자열) | 영문자를 소문자로 변환 |
UPPER(문자열) | 영문자를 대문자로 변환 |
LENGTH(문자열), LEN(문자열) | 문자열의 길이를 반환 |
LTRIM(문자열, 제거할 문자) | - 왼쪽에 있는 지정된 문자를 제거 - 제거할 문자를 생략 하면 공백 제거 |
RTRIM(문자열, 제거할 문자) | - 오른쪽에 있는 지정된 문자를 제거 - 제거할 문자를 생략 하면 공백 제거 |
TRIM(문자열, 제거할 문자) | - 왼쪽 및 오른쪽에 있는 지정된 문자를 제거 - 제거할 문자를 생략 하면 양쪽 공백 제거 |
8.2 숫자형 함수
숫자형 함수 | 설명 |
ABS(숫자) | 숫자의 절대값을 돌려준다 |
SING(숫자) | 숫자가 양수인지. 음수인지, 0인지를 구별한다 |
MOD(숫자1, 숫자2) | - 숫자1을 숫자2로 나누어 나머지값을 리턴한다. - % 연산자를 사용해도 된다. |
CEIL/CEILING(숫자) | 숫자보다 크거나 같은 최소 정수를 리턴 |
FLOOR(숫자) | 숫자보다 작거나 같은 최대 정수를 리턴 |
ROUND(숫자, m) | - 숫자를 소수점 m자리에서 반올림하여 리턴 - m을 생략하면 기본값은 0이다. |
TRUNC(숫자, m) | - 숫자를 소수점 m자리에서 잘라서 버린다. - m을 생략하면 기본값은 0이다. |
9. DECODE 문과 CASE 문
9.1 DECODE
프로그램 언어의 IF문과 동일한 기능으로 생각하면 된다.
두 개의 값을 비교하여 같으면 참을 다르면 거짓을 실행한다.
SQL> SELECT DECODE(EMPLOYEE_ID, 100, 'BOSS', 'WORKER') 2 FROM EMPLOYEES; DECODE(EMPLO ------------ BOSS WORKER WORKER WORKER WORKER WORKER WORKER WORKER |
EMPLOYEE_ID가 100이면 BOSS, 아니면 WORKER를 출력한다.
9.2 CASE
프로그래밍 언어의 IF~THEN ~ELSE-END 조건문과 같이 사용된다.
CASE [expression] WHEN condition_1 THEN result_1 WHEN condition_2 THEN result_2 ... WHEN condition_n THEN result_n ELSE result END |
SQL> SELECT 2 CASE 3 WHEN SALARY > 10000 THEN 'GOOD' 4 WHEN SALARY > 5000 THEN 'S0S0' 5 ELSE 'CHEAR UP' 6 END 7 FROM EMPLOYEES; CASEWHENSALARY>1 ---------------- GOOD GOOD GOOD S0S0 S0S0 CHEAR UP CHEAR UP |
10. ROWNUM과 ROWID
Oracle이라는 특정 데이터베이스에 국한된 설명이지만 다른 데이터베이스에도 비슷한 기능이 있는 경우가 있다. (SQL Server : TOP(숫자), MySQL : LIMIT 숫자 등)
10.1 ROWNUM
- SELECT문 결과에 대해서 논리적인 일렬번호를 부여한다.(첫번째 검색된놈, 두번째 검색된놈...)
- 조회되는 행 수를 제한할 때 많이 사용된다. (ROWNUM <= 10 : 10개만 검색)
- 만약 ROWNUM을 사용해서 페이지 단위 출력을 하기 위해서는 인라인 뷰(Inline View)를 사용해야 한다.
- 검색 결과에 무조건 1,2,3,4... 번호를 부여하기 때문에 다음 페이지 번호도 1, 2, 3,...이 부여되고 해결책으로는 (1,2,3...마지막) 번호를 가지고 있는 검색 결과에서 다시 조회 하는 방법이 인라인 뷰 이다.
SQL> SELECT * 2 FROM (SELECT ROWNUM NUM, EMPLOYEE_ID, FIRST_NAME 3 FROM EMPLOYEES) 4 WHERE NUM BETWEEN 7 AND 10; NUM EMPLOYEE_ID FIRST_NAME ---------- ----------- ------------------------------- 7 167 Amit 8 172 Elizabeth 9 192 Sarah 10 151 David |
10.2 ROWID
- ORACLE 데이터베이스 내에서 자동으로 생성되는 데이터를 구분할 수 있는 유일한 값이다.
- SELECT ROWID, EMPNO FROM EMPLOYEE와 같은 SELECT문으로 확인할 수 있다.
- 데이터가 어떤 데이터 파일, 어느 블록에 저장되어 있는지 알 수 있다.
11. WITH
- WITH 구문은 서브쿼리를 사용해서 임시 테이블이나 뷰처럼 사용할 수 있는 구문이다.
- 서브쿼리 블록에 별칭을 지정할 수 있다.
- 옵티마이저는 SQL을 인라인 뷰나 임시 테이블로 판단한다.
- 여러 테이블들을 JOINI으로 해결 하기 힘든 경우 사용 한다.
WITH (별칭) AS (SELECT 문장) SELECT 문장; |
SQL> WITH EMP_WITH AS 2 (SELECT EMPLOYEE_ID, JOB_ID, DEPARTMENT_ID FROM EMPLOYEES 3 UNION ALL 4 SELECT EMPLOYEE_ID, JOB_ID, DEPARTMENT_ID FROM JOB_HISTORY) 5 SELECT EMPLOYEE_ID, JOB_ID, DEPARTMENT_ID 6 FROM EMP_WITH 7 WHERE EMPLOYEE_ID = 200; EMPLOYEE_ID JOB_ID DEPARTMENT_ID ----------- -------------------- ------------- 200 AD_ASST 10 200 AD_ASST 90 200 AC_ACCOUNT 90 |
12. DCL(Data Control Language)
GRANT와 REVOKE 명령어가 있다.
12.1 GRANT
- 데이터베이스 사용자(User)에게 접속권한, 오브젝트 생성권한, DBA 권한 등을 부여하는 명령어.
- 데이터베이스를 사용하기 위해서는 모든 명령어에 대해 권한이 필요하다.
GRANT privileges ON object TO user; |
1) Privileges
권한 | 설명 |
SELECT | 지정된 테이블에 대해 SELECT 권한을 부여 한다. |
INSERT | 지정된 테이블에 대해 INSERT 권한을 부여 한다. |
UPDATE | 지정된 테이블에 대해 UPDATE 권한을 부여 한다. |
DELETE | 지정된 테이블에 대해 DELETE 권한을 부여 한다. |
REFERENCES | 지정된 테이블을 참조하는 제약조건 생성 권한을 부여 한다. |
ALTER | 지정된 테이블을 수정 할 수 있는 권한을 부여 한다. |
INDEX | 지정된 테이블에 대해 INDEX를 생성하는 권한을 부여 한다. |
ALL | 지정된 테이블에 대해 모든 권한을 부여 한다. |
2) WITH GRANT OPTION
옵션 | 설명 |
WITH GRANT OPTION | - 특정 사용자에게 권한을 부여할 수 있는 권한을 부여 - 권한을 부여 받은 사용자가 다른 사용자에게 권한을 부여한 경우 상위 권한자의 권한이 취소되면 하위도 취소된다. |
WITH ADMIN OPTION | - 테이블에 대한 모든 권한을 부여 한다. - 권한을 부여 받은 사용자가 다른 사용자에게 권한을 부여한 경우 상위 권한자의 권한이 취소 되어도 하위는 권한이 유지된다. |
12.2 REBOKE
- 데이터베이스 사용자(User)에게 부여한 권한을 회수 한다.
REVOKE privileges ON object FROM user; |
13. TCL(Transaction Control Language)
일반적으로 쿼리를 실행하면 데이터베이스에 바로 적용되지 않는다. 이를 이용하여 쿼리 실행을 전체 또는 일정 부분 취소하여 잘못된 쿼리로 데이터베이스의 데이터가 변경되지 않도록 한다.
13.1 COMMIT
- 모든 쿼리(INSERT, UPDATE, DELETE)가 데이터베이스에 반영되어 데이터가 변경된다.
- 데이터 변경을 위해 LOCK으로 잡고 있던 부분을 UNLOCK 한다.
- COMMIT 완료 후 다른 사용자는 변경된 데이터를 볼 수 있고 조작할 수 있다.
- COMMIT이 실행되면 하나의 트랜잭션이 완료된 것이다.
COMMIT; |
13.2 ROLLBACK
- 모든 쿼리(INSERT, UPDATE, DELETE)가 취소되고 트랜잭션이 종료된다.
- 바로 이전 COMMIT 한곳 까지만 취소된다.
ROLLBACK; |
13.3 SAVEPOINT
- 트랜잭션을 모두 취소하지 않고 부분으로 나누어 취소하려는 경우 사용한다.
- SAVEPOINT에 이름을 부여하여 그 위치까지 취소 처리 한다.
INSERT ..... UPDATE .... SAVEPOINT S1; -- SAVEPOINT 설정 DELETE ..... SAVEPOINT S2; -- SAVEPOINT 설정 INSERT .... ROLLBACK TO S1; -- S1 까지 ROLLBACK |
- copy coding -