CS - 강의, 서적/[SQLD] 홍쌤의 데이터랩

[SQLD] 2-17~18. SQL1 (DML, TCL, LOCK)

SH3542 2024. 9. 21. 20:10

[홍쌤의 데이터랩, SQLD n과목 완벽 정리] 영상를 개인이 정리하여 [원작자의 허가 이후] 올린 글이며,

[개인이 추가로 정리한 내용]이 포함되어 있습니다.

 

 

 
 

홍쌤의 데이터랩

[개정판] SQLD n과목 완벽 정리

https://www.youtube.com/watch?v=rdfHFnqVoRw

 

 


 

DML (Data Manipulation Language)

1. INSERT

- 전체 컬럼 데이터 입력시 컬럼명 생략 가능

- INTO 절에 컬럼명을 명시하여 일부 컬럼만 입력 가능

=> 컬럼에 NULL을 넣는 행위와, 입력하지 않는 행위 구분

- 입력 값 타입이 컬럼과 다르면 자료형 호환될 시 자동 형변환, 당연히 권장 X

- 컬럼명 생략 시, 입력 값 개수와 컬럼 개수가 같지 않으면 에러

=> 왼쪽부터 n개 컬럼에만 INSERT 하는 동작 아님

 

e.g.

 

1) 기본형

INSERT INTO t1 VALUES(v1, v2, ...);

INSERT INTO t1(c1, c2, ...) VALUES(v1, v2, ...);

 

2) 서브쿼리 활용(Oracle)

INSERT INTO t1(v1, v2,v3)

SELECT v1, v2, v3

FROM t2

WHERE 조건;

 

2. UPDATE

- 컬럼 단위 update 동작 수행

 

e.g.

 

1) 기본형

UPDATE t1

SET c1 = v1

WHERE 조건;

 

2-1) 다중 컬럼 수정

UPDATE t1

SET c1 = v1, c2 = v2, ...

WHERE 조건;

 

2-2) 다중 컬럼 수정

UPDATE t1

SET (c1 ,c2, ...) = (SELECT v1, v2, ...)

WHERE 조건;

 

3. DELETE

- 행 단위 delete 동작 수행

- WHERE 조건이 없으면 모든 데이터 삭제 주의

 

e.g.

 

1) 기본형

DELETE [FROM] t1

[WHERE 조건]

 

4. MERGE

- 소스 테이블과 참조 테이블을 동일하게 맞추는 작업 수행 (참조 테이블의 데이터 입력, 참조 테이블의 값으로 수정 등)

- INSERT, UPDATE, DELETE 작업을 단일 쿼리로 수행하고자 할 때

 

e.g.

 

1) 기본형

MERGE INTO t1(원본테이블)

USING t2(참조테이블)

           ON (연결조건)                                              -- 괄호 필수

 WHEN MATCHED THEN                                       -- 매치될 때 동작 기술 => 참조가 아니므로, 서브쿼리라고 칭하지 않음

             UPDATE                                                     -- t1(원본테이블)에 동작 수행 => 테이블명 기술 필요x

                     SET ...

              DELETE (조건)                                          -- 괄호 생략 가능

WHEN NOT MATCHED THEN

             INSERT INTO VALUES (v1, v2, ...);          -- t1( 원본테이블)에 동작 수행

 

2) 메뉴가 있다면(When Equal NO) 가격 갱신, 없다면 메뉴 추가

MERGE INTO OLD_TABLE OT

USING NEW_TABLE NT

      ON (OT.NO = NT.NO)

 WHEN MATHED THEN

              UPDATE

                      SET OT.PRICE = NT.PRICE

WHEN NOT MATCHED THEN

           INSERT VALUES (NT.NO, NT.NAME, NT, PRICE);

        -- INSERT INTO OT(NO, NAME, PRICE) VALUES (NT.NO, NT.NAME, NT, PRICE); => 테이블명 생략

 

TCL (Transaction Control Language)

- DML에 의해 조작된 결과를 트랜젝션 별로 제어하는 명령어

- DML 수행 후 트랜잭션을 정상 종료하지 않는 경우 lock이 발생할 수 있음

 

잠금 (LOCK)

- 트랜잭션 수행 도중 특정 데이터에 대해서 다른 트랜잭션이 동시 접근하지 못하도록 제한

- 잠금이 걸린 데이터는 실행 주체인 트랜잭션만이 접근 및 해제 가능 (root 계정 제외)

 

1. COMMIT

- 입력, 수정, 삭제한 데이터에 이상이 없을 경우 데이터를 반영하는 명령어

- 수행 시 commit 이전의 DML은 영구적으로 반영

 

2. ROLLBACK

- 입력, 수정, 삭제한 데이터에 대한 변경사항을 무효화하는 명령어

- 최종 COMMIT/변경 전/SAVEPOINT 지점 중 하나로 원복

 

3. SAVEPOINT

- 트랜잭션 내에서 롤백을 부분적으로 수행하기 위한 복원지점

- 사용자가 원하는 위치와 이름으로 설정 가능

- commit 이전 지점으로 원복 불가

 

e.g.

SAVEPOINT savepont_name;

..

 

ROLLBACK TO savepont_name;

-- ROLLBACK;