COMMIT
모든 작업을 정상적으로 처리하겠다고 확정하는 명령어이다.
COMMIT;
COMMIT 명령어를 사용할 경우
COMMIT; 명령어를 사용하지 않아도 자동으로 COMMIT이 되는 경우가 있다. ↴
// * 데이터 제어어 (Data Control Language, DCL)
// 사용자에게 권한 생성(grant) 혹은 권한 삭제(revoke) 같은 명령어를 실행
ROLLBACK
작업 중 문제가 발생했을 때, Transaction 처리 과정에서 발생한 변경 사항을 취소하고 Transaction 과정을 종료시킨다.
ROLLBACK;
ROLLBAKC 명령어를 사용할 경우
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, 참조키로도 많이 불리며 외부키, 외부 식별자 등으로도 불린다.
예제 ↴
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;