본문 바로가기
Study/중앙정보처리학원과정

21일차. Insert, Update, Rollback

by 얏옹이 2022. 11. 22.
반응형

 

오늘도 어김없이 DB 수업으로 시작!

 

 

DB에 데이터를 추가할때 제약조건을 잘 살펴봐야한다.

 

Null이 들어갈수 있는지? 각 문자열이나 숫자는 해당 컬럼에 몇 byte까지 입력이 가능한지? Unique 한지?

 

등등 이러한 제약조건을 알고 있어야 insert문으로 데이터 추가를 해줄때 오류를 줄일수 있다.

 

desc user_constraints; 명령어를 이용하여 Scott유저가 가지고 있는 전체적인 제약조건을 조회할수 있다.

 

Scott 계정으로 로그인한후에 해당 명령어를 입력해주니 이렇게나 많은 제약조건의 틀을 확인할수 있었다.

 

여기에서 constraint_name, constraint_type, table_name 3가지의 제약조건을 살펴보겠다.

 

여기서 PK는 Primary Key를 의미한다. Primary Key의 타입을 P로 표현해준것이고

정리하자면 DEPT와 EMP 테이블에 Primary Key를 가지고 있는 컬럼이 있고 EMP테이블의 DEPTNO는 Foreign Key로 지정되어있다.

 

여기서 CONSTRAINT_TYPE 종류를 알아보자면

P: Primary Key - not null + unique이면서 테이블대표, 각 레코드를구분, 식별키라고도 불린다.

U: Unique - 유일값. 중복X

C: Check, not null - 값을 넣어라. 값을 필수로 입력

R: Foreign Key

를 의미한다.

 

 

Insert에 대해 알아보자.

 

Insert의 기본문법은

 

insert into 테이블[(컬럼명....컬럼명)] 컬럼명 삭제가능(테이블 모든컬럼에 동일한 값을 넣어줄때 삭제가능)
values(값들...) 이다.

 

다양한 예제로 살펴보자.

 

일단 DEPT폴더에 부서와 부서지역을 좀 추가해주겠다.

 

현재 기본으로 오라클에서 제공하는 DEPT에는 이러한 데이터가 존재한다.

 

 

여기서 DEPT 테이블의 컬럼들에 타입과 제약조건을 먼저 살펴봐야하는데.

 

이러한 형식으로 되어있다. DEPTNO는 Number타입으로 숫자만 입력 가능하며, 2자리숫자 즉 99까지만 입력 가능하다.

NULLALBE이 NO로 되어있으니 Null이 들어가서는 안된다.

 

DNAME과 LOC는 VARCHAR2타입에 14,14 BYTE까지만 입력이 가능하다.

영어와 숫자는 1글자마다 1 BYTE가 할당되기때문에 영어&숫자는 각 14자리, 13자리 까지 입력이 가능하며

한글은 한글자당 3 BYTE를 할당하기때문에 최대 4글자까지만 가능할거같다. 참고로 공백(띄어쓰기)도 BYTE에 포함된다.

 

 

50번 부서에 '영업부'라는 이름의 'BUSAN'에 위치한 부서를 추가해주겠다.

 

insert into 테이블명 이후에 컬럼명을 기재해주었고, values에 컬럼명이 기재된 순서대로 값을 넣어주었다.

 

다시 Select를 해보면

 

정상적으로 영업부 부서와 BUSAN이 추가되었다.

 

다음은 60번 부서에 '디자인부'를 입력하고 LOC는 NULL을 넣어주겠다. 위의 테이블 구조에서 살펴봤듯이 LOC 컬럼에는 NULL값이 존재할수 있다.

 

 

정상적으로 삽입되었다. 여기서 약간의 다른 표현을 주었는데 Dept 다음에 컬럼을 지정해주지 않고

Values에 컬럼의 순서대로 값을 입력해주었다. 이렇게도 입력이 가능하다. 참고로 Null값을 넣어주는건

'NULL' 이라고 문자열로 표현해줘도 되고 문자열 표현 없이 NULL 이라고 입력해도 되고 ''작은따옴표 2개를 띄어쓰기 없이 입력해줘도 NULL값이 들어간다. 여기서 작은따옴표 사이에 공백을 넣어준다면, 이건 Null이 아니고 공백을 넣어준다.

 

다음은 Update 문을 알아보겠다.

 

Update는 수정을 의미한다. 오라클 Database에서 값을 수정해주기 위해서 쓰이는 Update문은 Where절과 항상 주로 같이 쓰인다.

 

UPDATE문의 기본 문법은 아래와 같다.

 

UPDATE 테이블명

SET 컬럼명 = 수정할 새로운 값

[WHERE 조건절] WHERE절은 조건이 없다면 생략가능;

 

 

마찬가지로 예제를 통해 살펴보겠다.

60번 부서의 디자인부의 LOC를 서울로 수정해주겠다.

 

 

 

정상적으로 SEOUL이라는 값으로 수정되었다.

 

WHERE절 없이 UPDATE DEPT SET LOC = 'SEOUL' 이라고만 작성하고 쿼리문을 날리면

특정 60번 부서가 아닌 전체 부서의 LOC가 SEOUL로 변경되니 이점 유의하자. 그래서 UPDATE문 소개할때 WHERE절과 함께 같이 쓰인다고 이야기 한것이다.

 

 

만약? 실수로라도 DATA를 UPDATE를 잘못했거나 DELETE를 잘못했다면? 걱정하지마라

 

우리에겐 Rollback이 있다.

 

Rollback이란? 이전의 Commit이 일어난 시점부터 다음의 Commit이 일어나기까지의 작업이 하나의 트랜잭션이라고 부르는데. Commit 전이라면 잘못된 데이터의 삽입과 삭제를 Rollback으로 이전의 Commit 단계로 되돌릴수 있다

 

Rollback은 트랜잭션 단위로 베이스에서 발생한 작업을 삭제하는 일이다.

 

그럼 Rollback을 예제로 알아보자.

 

일단 현재 60번 디자인부까지 입력한것을 Commit 해주고 60번 부서를 아예 Delete로 삭제해주겠다.

 

커밋 완료라는 문구와 함께 1행이 삭제되었다고 뜨고, Select 문으로 조회해보니 60번 부서가 사라졌다!

 

엌.... 실수로 날린거니 Rollback을 통해 되돌려보겠다. 삭제 이후에 Commit을 하지 않았기때문에 

 

현재 Rollback을 하면 이전 Commit 시점인 60번부서가 있던 상태로 되돌아간다. rollback 명령어는 간단하다

 

Rollback;

 

 

짜잔! 디자인부가 부활했다.

 

 

여기서 Rollback에 관해서 주의해야될점이 있다.

 

자동 Commit되는 명령어들이 있다.

바로 DDL과 DCL이다.

DDL - Create, Alter, Drop

DCL - Grant, Revoke

 

이 명령어들은 수행과 동시에 자동으로 Commit이 되어버리기때문에, 해당 명령어 이전으로 Rollback은 불가능하다.

해당 명령어를 사용할때는 항상 신중히 진행하는것이 좋을거같다.

 

 

 

반응형