본문 바로가기
DBMS/Oracle

[DML, TCL] 데이터 조작과 반영

by 로햐 2021. 11. 14.

Ⅰ. DML

DML(DATA MANIPULATION LANGUAGE)이란? : 데이터 조작 언어. 테이블에 데이터를 삽입, 수정, 삭제하는 구문.

1. INSERT

테이블에 튜플을 삽입하는 구문

 

1-1) INSERT

INSERT INTO TABLENAME VALUES(VALUE1, VALUE2, ...);--모든 컬럼값을 직접 기술
INSERT INTO TABLENAME(COLUMN1, COLUMN2,...) VALUES(VALUE1, VALUE2,...);--원하는 컬럼값만 기술
INSERT INTO TABLENAME SUBQUERY;--서브쿼리로 기술

 

1-2). INSERT ALL

--한번에 삽입하기
INSERT ALL
    INTO TABLENAME1 VALUES(VALUE1, VALUE2,...)
    INTO TABLENAME2 VALUES(VALUE1, VALUE2,...)
        SUBQUERY;


--조건에 따라 나눠 삽입하기
INSERT ALL
	WHEN Conditional Statements THEN INTO TABLENAME1 VALUES(VALUE1, VALUE2,...)
	WHEN Conditional Statements THEN INTO TABLENAME2 VALUES(VALUE1, VALUE2,...)
        SUBQUERY;

1-3) 주의사항

생략한 컬럼에는 NULL이 들어가므로, 값의 개수가 부족하진 않은가

제약조건을 위배하지 않는지 확인

컬럼과 컬럼값의 순서가 맞는지 확인


2. UPDATE

2-1. 튜플을 수정하는 구문. 

UPDATE STUDENT
	SET CLUB_ROOM = '음악실'
	WHERE CLUB = '음악부';-->생략가능. 조건이 없으면 모두 변경.

2-2. 서브쿼리 활용

--TABLENAME의 테이블에 COLUMN1, COLUMN2이 SUBQUERY로 만드는데, 조건에 맞는 튜플을 수정
UPDATE TABLENAME
	SET COLUMN1 = SUBQUERY, COLUMN2 = SUBQUERY
	WHERE Conditional Statements;
    
UPDATE TABLENAME
	SET (COLUMN1, COLUMN2) = SUBQUERY
	WHERE Conditional Statements;
    
UPDATE TABLENAME
	SET COLUMN1 = SUBQUERY, COLUMN2 = SUBQUERY
	WHERE Conditional Statements IN SUBQUERY;
    
--SUBQUERY인 테이블에서 보이는 튜플들의 COLUMN값을 VALUE로 변경
UPDATE SUBQUERY
	SET COLUMN = 'VALUE';
    -- 가상의 컬럼인지 확인해볼것. 실제 COLUMN값이 어딘가의 테이블에는 존재해야함

2-3. 주의사항

제약조건을 위배하지 않는지 확인


3. DELETE

3-1) 튜플을 삭제하는 구문. 

DELETE FROM STUDENT WHERE STUDENT_NAME='NABI';

3-2) FOREIGN 제약조건이 있는 경우 삭제 옵션을 기술하지 않으면 튜플을 삭제할 수 없다.

DELETE FROM STUDENT
WHERE GRADE = 3;
--외래키 등의 제약조건이 있을 경우 다른 조건 명시 없으면 삭제 불가능

ALTER TABLE STUDENT
DISABLE CONSTRAINT
GRADE_FK CASCADE; --테이블의 조건을 변경. CASCADE로 제약조건을 비활성화

ALTER TABLE STUDENT
ENABLE CONSTRAINT
GRADE_FK;--비활성화 된 제약 조건을 다시 활성화

3-3) TRUNCATE와 비교.

TRUNCATE는 전체 행 삭제 시 사용하며 DELETE 보다 수행 속도가 빠르고 실행 시 자동 COMMIT이 된다.

(하지만 개인 컴퓨터에서 적은 양의 데이터를 처리하는 경우 별반 차이 없거나 DELETE가 빠른 경우도 있음.

다만 일반적인 상황에서는 TRUNCATE가 빠른편.)


Ⅱ. TCL

ⅰ트랜잭션이란?

데이터베이스를 변환하는 논리적 기능을 수행하기위한 최소의 작업 단위.  COMMIT되기 전까지 쌓여있는 묶음.

 

ⅱ. 트랜잭션의 특성

원자성 : 트랜잭션은 데이터베이스에 모두 반영되거나 모두 반영되지 않아야 한다. 하나라도 오류가 발생하면 전부 취소.

일관성 : 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 후가 같아야한다. 트랜잭션은 언제나 한 방향.

독립성 : 동시에 실행되더라도 트랜잭션 중에 다른 트랜잭션이 끼어들 수 없다. 실행 중에 수행결과 참조 불가능.

지속성 : 성공적으로 완료된 트랜잭션의 결과는 영구적으로 반영.

 

1. COMMIT :

트랜잭션 작업이 정상 완료 되면 변경 내용을 디스크에 반영하고 트랜잭션이 비워진다.

DDL 구문 실행 시, 자동으로 COMMIT 된 것과 같은 효과를 가진다.

 

2. SAVEPOINT :

트랜잭션 중간에 세이브 포인트를 만들어 상태를 세부적으로 저장 시점을 만들 수 있다.

 

3. ROLLBACK

3-1. ROLLBACK : 가장 최근에 COMMIT된 시점으로 돌아간다.

3-2. ROLLBACK TO SAVEPOINT S1; SAVEPOINT S1로 돌아간다.

 

COMMIT;

SAVEPOINT S1;

SAVEPOINT SP2;

ROLLBACK S1;--S1 시점으로 ROLLBACK

ROLLBACK;--COMMIT 시점으로 ROLLBACK

ⅲ. 트랜잭션의 종류

로컬 트랜잭션 : 단위 시스템에서 처리. 

분산 트랜잭션 : 여러 시스템에서 처리. 주로 미들웨어에서 관리? 요 부분 찾아볼것.

'DBMS > Oracle' 카테고리의 다른 글

[데이터 딕셔너리]  (0) 2021.11.17
[OBJECT] 뷰, 시퀀스  (0) 2021.11.15
[DDL, DCL] 객체의 구조 설정과 권한  (0) 2021.11.11
[SELECT] SUBQUERY  (0) 2021.11.11
[SELECT] JOIN과 집합연산자  (0) 2021.11.08