Android에서 sqlite database를 생성하여 사용하다 DB 자체를 다시 만들어야 해서 삭제 하는 방법을 찾아 보았으나 쓸데없는 데이터나 테이블 삭제 방법만 나와서 복사해서 사용하려는 계획을 변경하여 직접 구현을 하게 되었네요.
별로 어려운 일이 아니라 글을 올릴 필요도 없지만 그래도 다음 번에 다시 사용하려면 몇가지 검색을 해야 해서 기록해 둡니다.

sqlite는 파일 구조로 만들어져 있어서 그냥 파일 지우는 방식으로 하면 됩니다.  한가지 알아야 하는 점은 파일 위치가 어디에 있느냐인데 그 경로를 붙여서 파일 삭제를 하면 됩니다.
그렇다면 Database를 추가해야 하는 일이 있다면 파일을 복사하듯 붙여넣으면 된다는 이야기도 되고요.

저는 버튼을 이용해서 삭제를 하였는데 메소드를 만들어서 호출을 해도 됩니다.
DB명 뒤에 .db를 붙여도 되고 생략해도 되는데 나중에 UI Viewer Tool을 사용하게 되면 꼭 db 붙은 파일을 찾아서 그냥 추가해서 사용 합니다.

 

public void btnDrop(View view) {
    String DB_PATH = "/data/data/" + getPackageName();
    String DB_NAME = "TestDB.db";
    String DB_FULLPATH = DB_PATH + "/databases/" + DB_NAME;

    File dbFile = new File(DB_FULLPATH);
    if (dbFile.delete()) {
        System.out.println(" 삭제 성공");
    } else {
        System.out.println(" 삭제 실패");
    }

}

 

이게 끝입니다.  DB 위치는 위에 보이는 것 처럼 /data/data/패키지명 아래에 있습니다. 이거 때문에 글을 남기네요.

 

- copy coding -

 

SQL 개발자 시험 과목

 

과목 과목별 세부 항목 문항수 배점
데이터 모델링의 이해 데이터 모델링의 이해 10 20(문항당 2)
데이터 모델과 성능
SQL 기본 및 활용 SQL 기본 40 80(문항당 2)
주관식(8)
SQL 활용
SQL 최적화 기본 원리

 

- 검정 시간 90(1시간 30)

- 합격 기준 : 총점 60점 이상(과목별 40% 미만 과락)

- 50문제 중 30문제 맞추면 합격

 

- 20문제를 틀리면 합격. 포기할 부분은 포기(?)

 

지난번 “[SQL 개발자] 데이터 모델링의 이해 자격증 시험 요약에 이러 SQL 기본에 대해 요약을 해보았습니다.

 

아래 내용은 SQL 개발자 자격증에 대한 서적 중 [이기적 SQL 개발자]를 참고하여 요약을 하였습니다.

 

sql developer database

 

 

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 생성문을 이용하여 DEPTEMP 테이블을 생성하는 명령어 예제.

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 생성

ViewTable 전체를 보여주기 싫거나 여러 개의 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) AB와 같은 것 조회
< (A < B) AB보다 작은 것 조회
<= (A <= B) AB보다 작거나 같은 것 조회
> (A > B) AB보다 큰 것 조회
>= (A >=B) AB보다 크거나 같은 것 조회

 

  - 부정 비교 연산자

부정 비교 연산자 설명
!= (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 AB 사이의 값 조회
IN (list) list와 일치하는 값(OR 조건) 조회
A IS NULL A NULL 값 조회

 

- 부정 SQL 연산자

부정 SQL 연산자 설명
NOT BETWEEN A AND B AB 사이에 해당하지 않는 값
NOT IN (list) list와 일치하지 않는 값 조회
A IS NOT NULL ANULL이 아닌 값 조회

 

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) ANULL이면 V1 출력
NVL2(A, V1, V2) ANULL이 아니면 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

 

HAVINGWHERE를 같이 사용하면 먼저 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_ID100이면 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. ROWNUMROWID

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 -


예전에는 개발자가 ERD를 그리거나 기존 ERD를 수정하는 일이 많았는데 요즘엔 프로젝트 진행시 정품 소프트웨어를 사용하면서 erwinDBA만 사용하고 개발자는 이미지로 생성해서 구경만 하는 경우가 많아졌습니다가끔 소규모 프로젝트에서는 무료 소프트웨어인 eXERD를 사용해서 ERD를 요구하는 곳이 있어서 만드는 방법을 올려 봅니다.


exerd auto erd create


우선 Table들은 DB에 생성이 되어있는 상태에서 진행을 합니다일단 eXERD를 설치하고 실행을 해서 eXERD 창을 열고


exerd auto erd create


네베게이터 에서 마우스 오른쪽을 클릭 하여 새로 작성 > 프로젝트를 선택 하면 새 프로젝트 장이 나타납니다.


exerd auto erd create


새 프로젝트 창에서 일반 항목을 확장하여 프로젝트를 선택 하고 [다음] 버튼을 클릭 하면 프로젝트 명을 입력하는 창이 나타나는데


exerd auto erd create


적당히 프로젝트 이름을 입력하고 저장할 위치를 선택 한 후 [완료] 버튼을 클릭 하면 프로젝트가 생성되고 네비게이터에 새로 생성한 copycoding 프로젝트가 나타납니다여기까지가 프로젝트를 생성하는 거고 실제 ERD를 만드는 과정을 진행 합니다.


exerd auto erd create


생성된 프로젝트에 마우스를 놓고 우측 버튼을 클릭 하여 새로 작성 > 리버스 엔지니어링 메뉴를 선택 하면 리버스 엔지니어링 창이 나옵니다.


exerd auto erd create


리버스 엔지니어링 팝업 창이 나타나면 파일 이름을 적당히 적어주고 [다음] 버튼을 클릭 하면 데이터베이스 관련 설정을 하는 창이 나타납니다.


exerd auto erd create


저는 Oracle XE를 설치해서 ojdbc6.jar 파일을 가지고 있습니다. JDBC 드라이버에 파일 위치를 설정 하고 드라이버 클래스와 URL 연결 정보도 입력 합니다.

Database에 연결을 위한 사용자 ID와 비밀번호도 입력을 해줍니다.

아직까지는 상단에 “x 연결 테스트를 진행하여 연결이 올바른지 확인해야 합니다.” 라는 안내 글이 보입니다좌측 하단 [연결 테스트]를 클릭하여 데이테베이스와 연결을 테스트 합니다.


exerd auto erd create


데이터베이스와 연결이 성공 했습니다연결 성공 창이 안나온다면 짜증내지 말고 설정을 다시한번 확인해 봅니다연결이 성공한 후의 모습은


exerd auto erd create


상단의 안내 문자가 변경 되었습니다. 이제 [완료]버튼을 클릭 하여 데이터베이스에서 Table 정보를 분석 합니다.


exerd auto erd create


열심히 Database를 분석하다 분석이 끝나면


exerd auto erd create


다이어그램 생성 마법사 창이 나타납니다.  [완료] 버튼을 클릭해 주면 다이어그램 생성을 진행 합니다. 그리고 잠시 후 


exerd auto erd create


이렇게 ERD를 생성해 줍니다무료 툴이긴 해도 쓸만한것 같습니다.


- copy coding -


구글 Firebase는 데이터를 저장 하는데 데이터베이스로 사용하기도 하고 파일 형태의 데이터를 저장하고 사용할 수 도 있습니다. 이번에는 firebaseProject를 생성 하였다면 데이터를 저장 하는 방법을 알아 봅니다.  


firebase cloud firestore database


데이터베이스 생성


파이어베이스에서 생성한 프로젝트를 선택하여 콘솔 화면으로 이동 합니다.  


firebase cloud firestore database


좌측 메뉴에서 Database메뉴를 선택하면 Cloud Firestoredatabase를 생성할 수 있는 화면으로 이동 합니다데이터베이스를 생성 하기 위해 [데이터베이스 만들기] 버튼을 클릭하여 팝업 창을 오픈 합니다.


firebase cloud firestore database


데이터베이스 생성은 [프로덕션 모드에서 시작][테스트 모드로 시작] 두 개의 조건이 있는데 라디오 버튼을 클릭해 보면 우측에 어떤 기능인지 설명과 스크립트를 볼 수 있습니다.


firebase cloud firestore database


자세히 보면 조건에 따른 권한임을 알 수 있는데 일단 [테스트 모드로 시작]을 선택하고 [다음] 버튼을 클릭 합니다.


firebase cloud firestore database


데이터베이스를 어디에 생성 할 것인가 하는 서버의 위치를 설정하는 화면 입니다너무 먼거리에 위치하면 속도가 느리고 과금 문제도 발생할 수 있습니다.

Cloud Firestore 위치는 테스트 할 때는 별로 중요하지 않지만 대한민국은 어디에 있는지 한번 알아 보겠습니다.


firebase cloud firestore database


각국의 중요 도시가 나오는데 서울은 구글 리스트에 나오지 않는군요좀더 찾아 봅니다.


firebase cloud firestore database


여기 맨 끝에 간신히 붙어 있네요서울(asia-northease3)으로 되어 있습니다.


firebase cloud firestore database


asia-northeast3을 선택 하고 [완료] 버튼을 클릭 합니다잠시 작업이 진행되고 


firebase cloud firestore database


 

데이터베이스가 생성이 되었습니다.

 

데이터 추가

 

이제 생성된 데이터베이스에 데이터를 추가하는데 일반 database와는 다르게 Table로 관리되지 않고 Collection, Document, Field 순으로 입력 하고 관리가 됩니다먼저 컬렉션을 만들기 위해 [컬렉션 시작]을 클릭 합니다.


firebase cloud firestore database


컬렉션 시작 창에서 컬렉션 ID를 입력하고 [다음]버튼을 클릭 합니다


firebase cloud firestore database


문서 ID는 자동 생성되는데 테스트 삼아 한번 입력해 보았습니다필드들은 ‘+’, ‘-‘ 버튼을 이용해서 추가 삭제하며 입력 합니다대충 입력했으면 [저장] 버튼을 클릭 합니다.


firebase cloud firestore database


데이터가 하나 추가 되었습니다이번에는 문서추가를 클릭하고


firebase cloud firestore database


문서 ID는 자동으로 하고 데이터를 입력한 후 [저장]버튼을 클릭 합니다.


firebase cloud firestore database


동일한 방법으로 데이터를 추가해서 사용하면 됩니다.


- copy coding -


123

+ Recent posts