[Oracle] Commit/Rollback, Column속성, Sequence

이혜원·2024년 8월 5일

Oracle

목록 보기
3/6

COMMIT

모든 작업을 정상적으로 처리하겠다고 확정하는 명령어이다.
COMMIT;

COMMIT 명령어를 사용할 경우

  • Transaction의 처리 과정을 데이터베이스에 반영하기 위해서 변경된 내용을 모두 영구 저장한다.
  • COMMIT을 수행하면 하나의 Transaction 과정을 종료하게 된다.
  • Transaction(Insert, Update, Delete) 작업내용을 실제 DB에 저장하여 이전 데이터가 완전히 Update된다.
  • 모든 사용자가 변경한 데이터의 결과를 볼 수 있게 된다.

COMMIT; 명령어를 사용하지 않아도 자동으로 COMMIT이 되는 경우가 있다. ↴

  • DDL(create, alter, drop, truncate)구문, *DCL(grant, revoke)구문 사용권한,
    insert, update, delete 작업 후 COMMIT을 하지 않고 오라클을 정상 종료시에 COMMIT명령어를 입력하지 않아도 자동으로 정상 COMMIT 후 오라클을 종류한다.

// * 데이터 제어어 (Data Control Language, DCL)
// 사용자에게 권한 생성(grant) 혹은 권한 삭제(revoke) 같은 명령어를 실행


ROLLBACK

작업 중 문제가 발생했을 때, Transaction 처리 과정에서 발생한 변경 사항을 취소하고 Transaction 과정을 종료시킨다.
ROLLBACK;

ROLLBAKC 명령어를 사용할 경우

  • Transaction으로 인한 하나의 묶음 처리가 시작되기 이전의 상태로 되돌린다.
  • Transaction(Insert, Update, Delete)작업 내용을 취소하고 이전에 COMMIT 한 곳 까지만 복구한다.
  • Transaction 작업 중 하나라도 문제가 발생하면 모든 작업을 취소해야 하기 때문에 하나의 논리적인 작업 단위로 구성해 놓아야한다.

  • 비정상적인 종료가 발생할 경우 자동으로 ROLLBACK된다.

COMMI과 ROLLBACK 명령어의 장점은 데이터의 무결성이 보장된다는 점과 논리적으로 연관된 작업을 그룹화 할 수 있다는 것이다.


컬럼 속성 - 무결성 제약 조건

  • not null : null값이 입력되지 못하게 하는 조건
  • unique : 중복된 값이 입력되지 못하게 하는 조건
  • check : 주어진 값만 허용하는 조건
  • primary key : not null + unique의 의미
  • foregin key(외래키) : 다른 테이블의 필드(컬럼)를 참조해서 무결성을 검사하는 조건

Not null

null값이 입력되지 못하게 할 때 쓰인다.

  • 선언 방법

    	create table null_test (
    		col1 varchar2(20) NOT NULL,
    		col2 varchar2(20) NULL,
    		col3 varchar2(20)
    	);
  • 기본적으로 null을 허용하기 때문에 col1 처럼 not null로 null값을 입력되지 못하게 하려는 것이 아닌이상 col2 처럼 굳이 null을 작성하지 않아도 된다.


Unique

중복된 값이 입력되지 못하게 할 때 쓰인다.

create table unique_test (
    col1 varchar2(20) NOT NULL UNIQUE,
    col2 varchar2(20) UNIQUE,
    col3 varchar2(20) NOT NULL,
    col4 varchar2(20) NOT null
);

또한, unique 제약으로 들어가는 컬럼들은 그들의 조합이 유일해야 한다.
각 컬럼의 데이터의 유일함이 아니라 조합이 유일해야한다.
CONSTRAINTS 제약조건명 UNIQUE(대상컬럼1, 대상컬럼2)

create table unique_test2 (
        col1 varchar2(20),
        col2 varchar2(20),
        CONSTRAINTS temp_unique UNIQUE(col1, col2)
);

Check

주어진 값만 허용할 때 쓰인다.

  • 선언 방법

    create table check_test(
        gender varchar2(10) NOT NULL,
        CONSTRAINTS check_gender CHECK (gender IN('남자', '여자'))
    );

    check_test 테이블은 gender값이 '남자', '여자'일때만 레코드를 저장할 수 있다.


Primary Key

not null + unique의 의미를 가지며
primary key, 기본키, pk, 주키, 식별자 등으로 불린다.

  • 선언 방법

    create table pkTable (
    	col1 varchar2(10) primary key,
    	col2 varchar2(10) constraints pk이름 primary key,
    	col3 varcahr2(10) ,
    	constraints pk이름 primary key(col3)
    );
  • 기본적인 제약조건들은 테이블을 생성할 때 같이 정의하며 테이블당 하나만 정의 가능하다.
    두 개 이상의 PK는 조합키/복합기 라고 불리고 묶어서 하나로 본다.

  • 자동 index가 생성되는데 이는 검색키로서 검색 속도를 향상시킨다.


Foreign Key

다른 테이블의 필드(컬럼)를 참조해서 무결성을 검사하는 조건으로
외래키, fk, 참조키로도 많이 불리며 외부키, 외부 식별자 등으로도 불린다.

  • fk가 정의된 테이블을 자식 테이블이라 칭하며 참조되는 테이블 즉, pk가 있는 테이블을 부모 테이블이라고 한다.
  • 참조하는 데이터 컬럼과 데이터 타입이 반드시 일치해야 하며 참조할 수 있는 컬럼은 키본키(pk)만 가능하다.
  • 부모 테이블은 자식의 데이터나 테이블이 삭제된다고 영향을 받지 않는다.

예제 ↴

create table parents (
    idx number(10),
    mid number(10) primary key
);

create table child (
    idx number(10) primary key,
    mid number(10),
    CONSTRAINTS fk_p FOREIGN KEY(mid)
    REFERENCES parents(mid) ON DELETE cascade
);

ON DELETE CASCADE
↳ 참조되는 부모 테이블의 행에 대한 delete를 허용.
즉, 참조되는 부모 테이블 값이 삭제되면 연쇄적으로 자식 테이블 값 역시 삭제된다.

ON DELETE SET NULL
↳ 참조되는 부모 테이블의 행에 대한 delete를 허용.
하지만, CASCADE와는 달리 부모 테이블의 값이 삭제되면 해당 참조되는 자식 테이블의 값들은 null값으로 설정된다.

  • 참조할 컬럼과 같은 컬럼이 자식 테이블에 존재해야한다.
  • 같은 이름을 쓸 필요는 없지만 관계를 알아보기 쉽게 같은 컬럼명을 사용한다.
  • 자식 테이블에 값을 먼저 넣을 수 없다.
  • 참조되는 컬럼에 데이터가 있어야 값을 넣을 수 있다.

시퀀스(Sequence)

자동으로 순차적 증가를 하는 순번을 반환하는 데이터베이스 객체이다. 즉, 연속적인 번호를 만들어주는 기능이다.
보통 PK값에 중복값을 방지하기 위해 사용한다.


시퀀스 생성 옵션

  • start with n : 초기화값
  • increment by n : 증가값
  • maxvalue n : 최대값
    nomaxvalue : 무한대값
  • minvalue n : 최소값
    nominvalue : 무한대값
  • cycle
    nocycle : 기본값은 nocycle
  • 제품 번호를 생성하는 시퀀스 만들기 ↴

    create sequence seq_serial_no
    increment by 1
    start with 100
    maxvalue 110
    minvalue 99
    cycle
    cache 2
    ;
  • 시퀀스를 적용할 테이블 생성 ↴

    create table goods (
        good_no number(3),
        good_name varchar(10)
    );
  • 테이블에 시퀀스를 적용해 컬럼 입력하기 ↴

nextval : 다음값

insert into goods value (seq_serial_no.nextval, '제품1');
  • 현재 시퀀스 번호 확인하기 ↴

currval : 현재 seq 번호

select seq_serial_no.currval from dual;
  • 시퀀스 삭제 ↴

    	drop sequence seq_serial_no;

0개의 댓글