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;