1 분 소요

📖Transaction

여러 쿼리들로 이루어진 논리적 작업의 단위

특성

  • 원자성 (Atomicity)

    트랜잭션과 관련된 일이 모두 수행되거나, 모두 수행되지 않았음을 보장한다. commit, rollback 명령어를 통해 무결성을 보장한다.

  • 일관성 (Consistency)

    허용된 방식으로만 데이터를 변경해야 한다.

  • 독립성 (Isolation)

    트랜잭션 수행 시 서로 끼어들지 못해야 한다.

  • 지속성 (Durability)

    성공적으로 수행된 트랜잭션은 영원히 반영되어야 하고, 문제가 발생해도 원래 상태로 회복이 가능해야 한다.

📖 데이터 무결성

데이터의 정확성, 일관성, 유효성을 유지하는 것

1) 개체 무결성

  • 중복된 데이터의 방지
  • 기본 키의 필드 값은 null이 될 수 없음

2) 도메인 무결성

  • 특정 속성 값이 정의된 도메인에 속해야 한다.

3) 참조 무결성

  • 참조 관계인 두 테이블은 항상 일관된 값을 유지해야한다.

4) null 무결성

  • 특정 속성 값에 null이 올 수 없다는 조건이 주어지면 null이 될 수 없다.

5) 고유 무결성

  • 특성 속성 값에 unique 조건이 주어지면 고유한 값을 가진다.

6) 키 무결성

  • 한 릴레이션에는 반드시 키가 하나 이상 존재해야 한다.

컬럼의 속성

  • NN(Not NULL) : Primary Key
  • ND(No Duplicate) : Primary Key, Unique
  • NC(No Change) : Foreign Key

제약조건 적용해보기

먼저 부서정보를 담는테이블을 만든다.

create table tblDept(
	deptno char(3), 
	dname varchar2(10));
insert into tbldept values('10', 'sales');
insert into tbldept values('20', 'marketting');

tblDept.png

그 후, 직원 정보를 담는 테이블을 만들고 외래키로 tblDept를 연결해본다.

create table tblEmp( 
	empno number, 
	ename varchar2(10), 
	hiredate date,
  deptno char(3),
  constraint ft_tblemp_deptno foreign key(deptno) references tbldept(deptno));

foreignErr.png

제약조건 확인 1

외래키로 연결하려는 속성은 고유한 값이 보장되어야 하므로 primary 또는 unique key여야 한다.

alter table tbldept add constraint pk_tbldept_deptno primary key(deptno);

기본키로 바꿔주고 다시 테이블을 만들면 잘 만들어지는 것을 볼 수 있다.

제약조건 확인 2

insert into tblemp values(1, 'hong', sysdate, '10'); #정상실행
insert into tblemp values(1, 'hong', sysdate, '30'); #에러

forErr2.png

연결된 tblDept테이블에 30번 부서는 없기에 에러가 발생한다.

제약조건 확인 3

update tbldept set deptno=100 where deptno=10; 

forErr3.png

이미 참조되고 있는 10번 부서의 번호를 바꿔버리면 에러가 발생한다. 다만 참조되지 않고 있는 20번 부서의 번호는 바꿔도 아무런 문제가 없다.

제약조건 확인 4

고유 무결성도 확인해볼 수 있다. 위에서 tblDept의 deptno를 기본키로 바꿔주었는데, 같은 부서 번호를 넣어보자.

insert into tbldept values('20', 'management');

uniqueErr.png

고유 무결성이 지켜짐을 확인할 수 있다.

제약조건 확인 5

이번엔 도메인 무결성을 확인해보자.

create table tblexam(
	id number(3), 
	name varchar2(10), 
	city varchar2(10),
  constraint ck_tblexam_city check(city='seoul' or city='busan'));
insert into tblexam values(1,'a', NULL); #정상실행
insert into tblexam values(2,'b', 'gumi'); #에러

ckErr.png

정해진 도메인 외의 값이 입력되면 에러가 발생하는 것을 볼 수 있다.

제약조건 삭제하기

도메인 제약조건을 삭제해보자.

alter table tblexam drop constraint ck_tblexam_city;

위와 같이 제거할 수 있고, 이제는 다른 도시의 이름도 잘 입력이 되는 것을 볼 수 있을 것이다.

댓글남기기