DB 2023.3.29

문우림·2023년 3월 29일
0

DB

목록 보기
5/6
post-thumbnail

1. 트랜잭션 관리

  • 일관의 작업 단위
  • 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위()
  • 만약 모두가 완전이 수행되지 않고, 어느 한 문장이라도 에러가 발생한다면, 트랜젝션으로 묶인

1-1. COMMIT

  • COMMIT 연산은 한개의 트랜잭션에 대한 작업이 성공적으로 끝났고 데이터베이스가 다시 일관된 상태에 있을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다.

1-2. ROLLBACK

  • Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산이다.

  • Rollback시에는 해당 트랜잭션을 재시작하거나 폐기한다.

무결성
➡컬럼에 조건 주는 것 = 정확성과 일관성, 유지하고 보중하기 위해서

왜 조건 주는가...

  • 데이터를 넣을 때(INSERT) 문제가 있으면 컴파일 에러를 출력하기 위해서.
  • 이상한 데이터를 못 넣게 하기 위해서.

2. DB 제약 조건

  • 제약조건이란 데이터의 무결성을 지키기위해 입력받은 데이터에 대한 제한을 두는 것.
  • 제약조건을 통해서 검사를 진행하여 어떤 조건을 만족하였을 경우 입력(INSERT)이 되도록 제약할 수 있다.

📌조건 종류

📌설정 화면

  • EMP테이블의 EMPNO를 PK_EMP라는 이름으로 PRIMARY KEY 설정 ➡ 중복되면 안돼고 NULL값도 들어가면 안된다.
  • DEPT의 DEPTNO를 외래 키로 설정하여 DEPT테이블과 연결할 수 있게된다.

트랜잭션

3. 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 = 영구 저장, 변경 사항을 파일에 저장

4. 제약 조건(NOT NULL, UNIQUE)

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(제약 조건)

0개의 댓글