본문 바로가기
Oracle

Oracle (6) - DB 트랜잭션과 DML명령어 ( insert, update, delete )

by leehii 2022. 6. 8.

ㅁ DB 트랜잭션과 DML명령어

트랜잭션
-- 데이터베이스 내에서 발생하는 작업의 단위, 작업의 모음
-- 일괄처리를 하기위한 기준


커밋 (COMMIT) =  트랜잭션의 정상적인 수행내용을 DB에 물리적으로 영구히 저장하는 것 (따라서 절대 롤백되지 않음)
--자동 >> 1개의 트랜잭션이 끝났을때
--수동 >>  수동으로 commit; 명령어 입력
롤백 (ROLLBACK) = 비정상적 트랜잭션을 트랜잭션 이전시점으로 취소하는 것
--자동 >> 비정상으로 종료할때
--수동 >> 수동으로 rollback; 명령어 입력

병행제어
--하나의 트랙젝션이 진행중일때 다른 곳에서 해당 내용을 수정하지 못하도록 진행중인 건에 대하여 잠금되어 대기상태에 들어감
--다른 진행자가 COMMIT하거나 ROLLBACK 하기전까진 같은 값을 ;로 완료까해도 전혀 수정되지않다가 잠금이 끝나야 진행됨
--다른 곳에서는 해당 트랜잭션을 건드릴 수 없음
--따라서 왠만하면 명령어 끝에 commit 명령어를 같이 넣어주는게 좋음 (다른 사람의 접근을 위해)
--두명이 서로 각자의 값에 수정하러 들어갈경우 한명이 DEADLOCK이라 에러가 뜨며 튕김 (둘다 잠금걸리진 않음)
--진행중이 아닌 다른 행에 대해서는 동시 작업이 가능함


DML 명령어 >> DML 명령문 전체가 1개의 트랜잭션
--(ex) INSERT 여러번 해도 전체가 1개의 트랜잭션
--참고로 DDL 명령어, DCL 명령어는 문장 하나가 1개의 트랜잭션

DML 명령어의 종류 (insert, delete, update)
--INSERT >> 행단위 명령 / 새 행 추가 (맨 끝에)
--형태
insert into table_name 1. insert into dept                    >> 모든 컬럼에 데이터 삽입
values(입력할 Data values);    values()
2. insert into dept(did,dname,loc)     >>해당 컬럼에 데이터 삽입
   values(10, 'aa', '광주')
   
--into 절에 명시된 컬럼의 순서, 갯수, 데이터 타입, 길이에 맞게 values절의 입력 데이터를 1:1로 매칭해줘야 함

--무결성을 지켜줘야함 (따라서 테이블구조 확인이 필요함)

--insert는 행을 삽입하기때문에 값을 지정해주지 않고 넣으면 해당열을 생략하고 집어넣음 (자동)
  이게 싫다면 null키워드를 직접 입력해주면 됨 (수동)

--UPDATE 열단위 명령 /  컬럼을 추가해줬을때 이때 빈 열의 null값을 넣을때 사용가능함
--형태
update column_name 어느 컬럼에서?
set column_name 누구를?
where column_name 조건식 뭘 바꿀껀지?


--DELETE 행단위 명령 /
--형태
DELETE FROM COLUMN_NAME



DEPT(부모테이블) EMP(자식테이블)            
------------- ------------
DID(PK) DNAME EID(PK) DID(FK)  >> INSERT, UPDATE등을 사용할때 
10 A 100 10  자식테이블은 FK안에서 자유롭게 변경 가능 // delete는 가능
20 B   101 20 부모테이블의 경우 자식이 참고하는 데이터의 경우 변경할 수 없음
30 C 단 자식테이블에서 참고하고 있지 않는 값은 변경할 수 있음
   
   

 

6. DB 트랜잭션과 DML명령어(insert, update, delete)
0.00MB