Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산이다.
Rollback시에는 해당 트랜잭션을 재시작하거나 폐기한다.
✔무결성
➡컬럼에 조건 주는 것 = 정확성과 일관성, 유지하고 보중하기 위해서
왜 조건 주는가...
📌조건 종류
📌설정 화면
--DROP TABLE 테이블 삭제
DROP TABLE DEPT01;
CREATE TABLE DEPT01 AS SELECT * FROM DEPT; --기존 테이블을 복사
DELETE FROM DEPT01;
ROLLBACK; --COMMIT된 부분까지 롤백된다.
SELECT * FROM DEPT01;
--COMMIT하기 전까지의 내용이 롤백이 되기 때문에 삭제를 해도 COMMIT을 안한 상태이면 새로운 DB환경에서도 불러올 수 있다(롤백 가능).
--하지만 삭제 후 COMMIT을 하면 두 번 다시 롤백할 수 없고 어는 환경에서 접속하려해도 무리. 완전히 메모리 상에서 삭제됨.
--COMMIT = 영구 저장, 변경 사항을 파일에 저장
CREATE TABLE EMP01(EMPNO NUMBER(4), ENAME VARCHAR2(10), JOB VARCHAR2(9), DEPTNO NUMBER(2));
INSERT INTO EMP01 (EMPNO, ENAME, JOB, DEPTNO) VALUES (NULL, NULL,'SALESMAN', 30);
ROLLBACK;
SELECT * FROM EMP01;
COMMIT;
CREATE TABLE EMP02(
EMPNO NUMBER(4) NOT NULL, --제약 조건 넣어줌.
ENAME VARCHAR2(10) NOT NULL,
JOB VARCHAR2(9),
DEPTNO NUMBER(2)
);
INSERT INTO EMP02 (EMPNO, ENAME, JOB, DEPTNO) VALUES (100, '홍길동', 'SALESMAN', 30);
SELECT * FROM EMP02;
CREATE TABLE EMP03(
EMPNO NUMBER(4) UNIQUE, --제약 조건 넣어줌. UNIQUE=유일한, 해당 컬럼 키가 중복되면 안된다. NULL은 들어감.
ENAME VARCHAR2(10) NOT NULL, --NULL을 데이터로 넣으면 안되는 제약 조건.
JOB VARCHAR2(9),
DEPTNO NUMBER(2)
);
INSERT INTO EMP03 (EMPNO, ENAME, JOB, DEPTNO) VALUES (100, '홍길순', 'SALESMAN', 30);
INSERT INTO EMP03 (EMPNO, ENAME, JOB, DEPTNO) VALUES (100, '홍길순', 'SALESMAN', 30); --UNIQUE조건 -> 100은 위와 중복되니까 오류가난다.
INSERT INTO EMP03 (EMPNO, ENAME, JOB, DEPTNO) VALUES (NULL, '홍길순', 'SALESMAN', 30); --NULL은 넣을 수 있음.
--UNIQUE + NOT NULL = PRIMARY KEY(제약 조건)