1. Transactions
트랜잭션(Transaction)이란 데이터베이스에서 작업의 단위로 여러 개의 쿼리로 구성될 수 있다.
- 원자성
모든 작업이 수행되면 commit하고 한 작업이라도 제대로 수행되지 않으면 rollback이 필요하다.
- 독립성
다른 트랜잭션에 영향을 받지 않아야 한다.
- 일관성
- 지속성
- commit
데이터베이스에서는 레코드를 업데이트하는 의미로 쓰이고, 트랜잭션에서는 데이터베이스를 저장하는 것을 의미한다. 따라서 commit을 하면 모든 사용자가 데이터의 변화를 볼 수 있다(영구적으로 반영된다).
- rollback
트랜잭션이 실패하면, 현재 실행중인 트랜잭션을 취소하고 트랜잭션 수행 이전의 상태로 복구하는 것이다.
대부분의 데이터베이스에서 SQL문은 하나의 트랜잭션으로 간주된다. 따라서 SQL문이 수행되자마자 커밋(commit)을 수행하여 변경 사항을 저장한다. 하지만 트랜잭션이 여러 개의 SQL문으로 이루어지는 경우에는 auto commit을 해제하고, SQL문들을 하나의 트랜잭션으로 묶어주어야 한다.
2. Integrity Constraints(무결성 제약조건)
데이터베이스를 수정할 때 데이터의 일관성을 유지하기 위한 제약 조건이다.
한 relation에서의 무결성 제약조건
제약 조건 | 설명 |
not null | null값을 허용하지 않음. |
primary key | primary key로 선언 (값이 같은 tuple이 존재할 수 없음, null 값이 존재할 수 없음) |
unique | 모든 Attribute들의 값이 같은 tuple이 존재할 수 없음. |
check (P) | 모든 tuple이 만족해야하는 조건을 명시함. (Attribute의 도메인을 제한하는 것) |
3. Referential Integrity(참조 무결성)
두 relation 간의 참조의 일관성을 보장해주는 것으로 참조하는 relation의 foreign key 값은 참조되는 relation의 값으로 존재해야 한다는 것.
create table 명령어를 이용하여 relation을 만들 때 foreignkey (dept_name) references (department);를 추가하여 참조를 정의할 수 있다.
참조 무결성 제약조건은 foreign key 제약조건과는 다르게, 참조되는 Attribute가 Primary key일 필요는 없다.
4. Cascading Actions in Referential Integrity
참조된 relation에 대한 삭제 또는 갱신이 제약조건을 위반하면 삭제나 갱신을 거부하는 대신 참조하는 relation의 tuple을 변경하는 것.
다음과 같이 on delete cascade 명령어를 써 주게 되면, department relation의 한 학과에 대한 tuple이 삭제될 때, course relation에서 해당 학과에 개설된 모든 강의를 연쇄적으로 삭제하게 된다.
추가적으로, on delete set null 또는 on delete set default 명령어를 사용하여 삭제된 tuple을 참조하던 tuple의 해당 attribute 값을 null 또는 default 값으로 대체할 수도 있다.