ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [3회차-①] ORACLE (트랜잭션과 무결성 제약 조건)
    ORACLE 2021. 5. 2. 16:35

    강의명 : 오픈프레임워크 활용 디지털융합 SW엔지니어 양성 과정

    강의 날짜 : 21.04.28

     

     

    <트랜잭션>

     

    모든 DBMS에 다 있는 기능으로 데이터를 처리하는 논리적인 작업 단위이다.

     

    데이터를 처리하는 작업이므로 트랜잭션 작업은 즉, DML 명령어로 수행되는 작업을 의미한다.

    트랜잭션 명령어 설명
    COMMIT 완료, 확정
    ROLLBACK 작업 취소, 명령 취소
    SAVEPOINT 복구 지점

     

     

    1. 자동 COMMIT과 자동 ROLLBACK

     

    cmd 창을 EXIT 명령어로 정상 종료 → 자동 COMMIT

    DDL, DCL명령문이 수행된 경우 → 자동 COMMIT

    단, DDL, DCL명령문이 수행된 경우에 에러가 난 것은 무관하게 자동 COMMIT이 수행된다.

     

    오류가 뜨냐 안 뜨냐가 문제가 아니라 DDL 명령어 + 엔터키(확정키)로 확정하면 자동 COMMIT이다.

     

    cmd 창을 닫을 때, 닫기 버튼을 누르거나 강제 종료가 된 경우로 비정상적 종료 → 자동 ROLLBACK 

     

     

     

    2. 트랜잭션 작업

     

     

    SELECT문은 DML이 아니라 그저 조회 기능의 QUERY어이다.

    트랜잭션 작업은 데이터 관련 기능 DML(INSERT, UPDATE, DELETE)만 가능하다.

     

    트랜잭션은 COMMIT과 COMMIT 사이의 기능이므로,

    그 기능 단위로 COMMIT과 ROLLBACK이 이루어진다.

     

     

     

    <무결성 제약 조건>

     

    제약 조건은 잘못된 데이터가 입력되지 않도록 테이블 생성 시(CREATE TABLE)에 주는 것이다.

     

    무결성 제약 조건 설명
    NOT NULL NULL값을 허용하지 않음
    UNIQUE 중복 불가. 유일한 값이어야 함
    PRIMARY KEY NOT NULL + UNIQUE
    FOREIGN KEY 참조키
    CHECK 값의 범위를 줄 때 (ex.미성년/일반 가입)

     

     

    1. NOT NULL

     

     

    EMPNO와 ENAME 컬럼은 NOT NULL 제약을 가지고 있으므로

    값을 넣을 때 값을 주지 않거나 NULL 값을 주면 오류가 나게 된다.

     

     

     

    2. UNIQUE

     

     

    DESC 명령어로는 NULL 값 여부만 확인할 수 있으므로

    제약조건을 기술해 놓은 USER_CONSTRAINTS 테이블에서 제약 조건을 확인한다.

    * USER_정보

    : 사용자가 정의한 것에 대한 정보 테이블

     

    CONSTRAINT_TYPE이 C이면 제약조건이 NOT NULL 혹은 CHECK이고,

    U이면 UNIQUE이다.

     

    CONSTRAINT_NAME에는 시스템이 정해놓은 제약조건 이름이 붙게 되는데, 

    사용자가 확인하기  불편함이 있으므로 따로 제약조건명을 불여주는 것이 관리하기 편리하다.

     

    UNIQUE는 중복값 불가이므로 같은 값을 또 삽입할 시 오류가 나게 된다.

     

     

     

    3. PRIMARY KEY

     

     

    CONSTRAINT 키워드를 사용하면 제약조건 이름을 설정할 수 있다.

    제약조건을 설정할 때 컬럼명 옆에 같이 한 줄로 정의하는 방법을 컬럼 레벨이라고 하고,

    컬럼명과 데이터 타입을 모두 기술 후에 마지막에 테이블 단위로 제약조건을 주는 방법은 테이블 레벨이라고 한다.

     

    만약 PRIMARY KEY를 다중으로 주는 경우는 컬럼 레벨이 아니라 테이블 레벨로 정의해야 한다.

     

    PRIMARY KEY는 NOT NULL과 UNIQUE를 모두 포함하므로 NOT NULL여부에 NOT NULL이 기술된다.

    PRIMARY KEY의 CONSTRAINT TYPE은 P로 기술한다.

     

     

     

    4. 제약조건의 추가와 제거

     

    테이블의 구조, 자료형, 제약조건을 테이블 스키마라고 한다.

    이 스키마에 대한 정의, 변경, 삭제는  DDL 명령어로 실행한다.

     

    * 제약조건 추가

     

    ALTER TABLE 테이블명

    ADD CONSTRAINT 제약조건명 제약조건(제약조건대상 컬럼명);

     

     

    * 제약조건 삭제

     

    ALTER TABLE 테이블명

    DROP CONSTRAINT 제약조건명;

     

     

     

    5. CHECK

     

    CHECK는 IN연산자를 사용하여 괄호 안의 값만 담을 수 있게 제약을 주는 것이다.

     

     

    CHECK와 NOT NULL은 CONSTRAINT_TYPE의 약어가 같아서 구분할 수가 없으므로 

    SEARCH_CONDITION 항목으로 확실하게 제약조건을 확인할 수 있다.

     

    CHECK 제약조건은 괄호 안의 값만 담을 수 있으므로 그 외의 값이 들어오면 오류가 나게 된다.

     

     

     

    6. FOREIGN KEY

     

     

    R_CONSTRAINT_NAME으로 참조중인 키를 확인할 수 있다.

    그래서 제약조건 명이 중요하다는 것이다.

    현재 TEST06은 TEST 테이블의 기본키인 DEPTNO 컬럼을 참조 중임을 바로 알 수 있는 것이다.

     

     

    참조키의 범위에 속해야 값이 삽입될 수 있다. 

     

    테이블과 테이블의 관계를 RELATIONAL이라고 하는데 이것은 즉, REFERENCE에서 온 것이다.

    그리고 이것을 관리할 수 있게 해주는 시스템이 RDBMS이다.

     

     

    참조는 JAVA의 상속(extends)와 비슷한 개념이다.

    여러 테이블을 참조하는 것이 가능하며, 부모가 가진 데이터 안에서 사용할 수 있다.

     

    만약 부모 테이블에서 관련 레코드를 삭제, 수정하면 하위의 자식 테이블은 오류가 나게 된다.

    데이터 삭제 DELETE나 테이블 삭제 DROP은 부모 테이블은 할 수 없다.

    하지만 CASCADE 키워드를 사용하면 참조 중이라 하더라도 삭제가 실행된다.

     

     

     

    'ORACLE' 카테고리의 다른 글

    [4회차-①] ORACLE (시퀀스, 뷰, DCL)  (0) 2021.05.02
    [3회차-②] ORACLE (JOIN과 서브쿼리)  (0) 2021.05.02
    [2회차-③] ORACLE (DML)  (0) 2021.04.29
    [2회차-②] ORACLE (DDL)  (0) 2021.04.29
    [2회차-①] ORACLE (내장 함수)  (0) 2021.04.29
Designed by Tistory.