본문 바로가기

프로그래밍 /DB

[SQL] 개념-

 

환경설정 -> SQLDEVELOPER(ORACLE)/MAC


LIST

- CONSTRAINT

- TRANSACTION CONTROL

DICTIONARY

- DDL

- DCL



1.Constratint



Constratint란? 이터 무결성 유지를 위하여 사용자가 지정할 있는 성질. 제약 조건이다.

모든 Constraint 데이터 사전(Data Dictionary) 저장.

이름 관련 권고 사항

의미 있는 이름이어야 참조가 쉬움

표준 객체 명명법을 따르길 권장

사용자 내에서 중복 불가

이름을 생략했다면 ORACLE SYS_Cn형식의 이름을 만듬.



1. Not Null


-> null 값을 컬럼에서 가질수 없다!!



2. UNIQUE 

-> 컬럼이나 컬럼의 조합이 테이블의 각 행을 유일하게 구별 시킨다!

-> 테이블 레벨이나 컬럼 레벨에서 정의 가능

-> UNIQUE 칼럼에 대한 레벨에서 정의 가능 


        3. PK( Primary Key)


  -> 테이블에 단하나의  PK 허용

-> 여러 칼럼이여도  NULL 값을 허용 하지 않음

->테이블 레벨이나 컬럼 레벨에서 정의 가능

-> UNIQUE인덱스 자동 생성


4. FK ( Foreign Key)


-> FOREIGN KEY 자식(child)테이블에 정의

 -> 부모(parent) 테이블의 값과 일치하거나 NULL이어야 한다.

 -> 테이블 레벨이나 컬럼 레벨에서 정의 가능

FOREIGN KET 제약 조건을 주의 사항

1.참조하고자 하는 테이블이 먼저 생성되어 있어야 한다.

2.참조하고자 하는 컬럼이 PRIMARY KEY 또는 UNIQUE 제약 조건이 있어야 한다.

3.참고하고자 하는 칼럼의 데이터 타입이 일치해야 한다.

 ->    ON DELETE CASCADE 옵션 : 참조하는(child) 테이블 쪽에 옵션을 주면 참조되는(parent) 

테이블의 행을 삭제 가능하게 뿐만 아니라 참조하는 행들도 자동으로 삭제해주는 옵션


      5.  Check 

     행이 만족해야하는 조건을 정의

    CHECK 제약 조건에서 사용할 없는 것들

        • CURRVAL, NEXTVAL, LEVEL, ROWNUM 대한 참조
        • SYSDATE, UID, USER, USERENV 함수에 대한 호출
        • 다른 행의 값을 참조
        • ORACLE server 예약어는 없다
        • 컬럼이나 테이블 레벨에서 모두 정의할 있다.

//Constraint 정의 방법  가지
- 컬럼 레벨 제약조건 - 어떤 유형의 제약조건도 정의 가능
컬럼[CONSTRAINT 제약조건 이름] 제한조건 유형

- 테이블레벨 제약 조건 - 어떤 제약조건도 정의 가능.(NOT NULL제외)
컬럼 레벨 제약과 별개이며, 여러 컬럼에 제약조건을 정의할  사용.
컬럼,...
[CONSTRAINT 제약조건 이름] 제한조건 유형 (컬럼1, 컬럼2)

2.TRANSACTION


transaction - > 논리적인 업무의 작업단위


Transaction Control Language ( 트랙잭션 처리어 ) ↓↓↓↓↓

COMMIT : D아직 저장되지 않은 데이터 변경 사항을 DB에 저장하고 현재 트랜잭션 종료 (DDL 혹은 DCL 명령실행시 자동으로 COMMIT 된다. COMMIT 이 되고나면 이전 데이터는 사라지고 DB에 변경사항이 반영되며 다른 유저들도 수정 가능.)


SAVEPOINT 이름 : 현재의 트랜잭션에 SAVEPOINT 지정

ROLLBACK : 아직 저장되지 않은 모든 데이터 변경 사항 취소하고 트랜잭션 종료. ( 즉 커밋 되지 않은 상태에 대해 변경사항을 돌린다 Ctrl z 같은 되돌리기    BUT 다른 유저들이 조작을 할 수 없습니다.)


COMMIT 전 데이터 상태
COMMIT 후 데이터 상태
ROLLBACK 후 데이터 상태
* 단지 buffer에만 영향을 받았기 때문에 데이터의 이전 상태는 복구될 수 있다. 
* 현재 사용자는 SELECT문으로 작업의 결과를 확인할 수 있다. 
* 다른 사용자는 현재 사용자가 수행한 작업의 결과를 볼 수 없다. 
* 변경된 행은 Lock이 설정되어서 다른 USER가 변경할 수 없다.
* 데이터에 대한 변경사항은 데이터베이스에 반영된다.
* 이전 데이터는 영원히 잃어버리게 된다.
* 모든 사용자는 결과를 볼 수 있다.
* 관련된 행에 대한 Lock이 풀리고 다른 사용자들이 행을 조작할 수 있게 된다.
* 데이터에 대한 변경사항은 취소된다.
* 이전 데이터는 다시 재저장된다.
* 관련된 행에 대한 Lock이 풀리고, 다른 사용자들이 행을 조작할 수 있게 된다.


3.DICTIONARY


Dictionary란?? -> 시스템 전체에서 나타나고 있는 데이터 항목에대한 정보를 지정하는 저장소

(ORACLE SERVER명, 사용자에게 허가된 권한 , 데이터베이스 객체명 , 테이블 제약조건....)


  • ORACLE SERVER에 의해서 생성되고 유지보수
  • 데이터베이스에 대한 정보를 가짐
  • 읽기 전용으로만 제공되는 뷰(VIEW)와 테이블의 집합
  • 데이터 사전(data dictionary) 테이블은 SYS 사용자가 소유


4.데이터 정의어(DDL)

Data Definition Language

데이터 정의어 : SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용하는 언어



↑↑↑↑↑↑


모두데이터 정의 명령어로 실행시 자동 commit 후에

rollback 될수 없으므로 주의해서 실행 !!!!



5.DCL(데이터 제어어)

Data Control Language



!!!권한(Privilege): 특정한 SQL문장을 수행하거나 특정 object에 허가된 작업.

  • 시스템 권한(system privilege) :
    1. 특정한 SQL문장을 실행할 수 있는 권한.
    2. 대개 데이터베이스 관리자(DBA)가 부여
GRANT 권한[, 권한...] TO 사용자 [, 사용자...]
[WITH ADMIN OPTION];
REVOKE 권한[, 권한...] FROM 사용자 [, 사용자...]
  • 오브젝트 권한(object privilege) :

      1. 특정한 오브젝트 에 대한 접근을 제어하는 권한.
      2. DBA는 특정한 object에 대해서 사용자에게 action을 수행하도록 허가 할 수 있다.
      3. 오브젝트 권한은 오브젝트 타입에 따라 다양하다.
      4. 오브젝트 소유자는 다른 사용자엑 특정 오브젝트 권한을 부여할 수 있다.

!!!역할(Role): 권한 부여와 접근제어 관리를 손쉽게 하기 위해 연관된 권한들의 집합을 묶어서 정의해 놓은 것.

    • Role을 이용하면 권한부여와 회수를 쉽게 할 수 있다.
    • 한 사용자가 여러 Role을 access할 수 있고, 여러 사용자에게 같은 Role을 부여할 수 있다.
    • 사용자는 Role에 Role을 부여할 수도 있다.


'프로그래밍 > DB' 카테고리의 다른 글

[SQL] 오라클 JOIN 및 개념  (0) 2018.02.12