ROW_NUMBER()

SELECT된 레코드들에 특정 기준을 붙여서 일련번호 추가

  • PARTITION BY : 특정 값을 기준으로 그룹핑(GROUP BY와는 다르지만 ROW_NUMBER에서 쓰일 땐 역할이 비슷함)
ROW_NUMBER() OVER(PARTITION BY field1 ORDER BY field2)
-- 필드1을 그룹핑해서 필드2를 기준으로 정렬

FIRST_VALUE/LAST_VALUE

FIRST_VALUE는 쿼리 결과에서 첫번째 행을,  LAST_VALUE는 마지막 행을 가져옴.( 사용법 참조: https://gent.tistory.com/338 )

트랜잭션

  • Atomic하게 실행되어야 하는 SQL들을 묶어서 하나의 작업처럼 처리하는 방법
    • DDL이나 DML 중 레코드를 수정/추가/삭제한 것에만 의미가 있음.
    • SELECT에는 트랜잭션을 사용할 이유가 없음
    • BEGIN과 END 혹은 BEGIN과 COMMIT 사이에 해당 SQL 들을 사용
    • SQL이 하나라도 실패하면 ROLLBACK
  • 트랜잭션 커밋 모드 : autocommit
    • autocommit = True
      • 모든 레코드 수정/삭제/추가 작업이 기본적으로 바로 DB에 쓰여짐. 이름 커밋 된다고 함.
      • 만약 특정 작업을 트랜잭션으로 묶고 싶다면 BEGIN과 END(COMMIT)/ROLLBACK 으로 처리
    • autocommit = False
      • 모든 레코드 수정/삭제/추가 작업이 COMMIT 호출될 때 까지 커밋되지 않음
  • Google Colab의 트랜잭션
    • 기본적으로 모든 SQL statement가 바로 커밋됨 (autocommit = True)
    • 이를 바꾸고 싶다면 BEGIN;END; 혹은 BEGIN;COMMIT;을 사용(혹은 ROLLBACK)
  • psycopg2의 트랜잭션
    • autocommit이라는 파라미터로 조절 가능
    • autocommit = True : 기본적으로 PostgreSQL의 커밋 모드와 동일
    • autocommit = False : 커넥션 객체의 .commit()과 .rollback()함수로 트랜잭션 조절 가능

DELETE FROM vs TRUNCATE

  • DELETE FROM table_name
    • 테이블에서 모든 레코드를 삭제
    • DROP TABLE table_name과 다른 점은 레코드를 삭제하지만 테이블은 남아있음.
    • WHERE 사용해 특정 레코드만 삭제 가능.
  • TRUNCATE table_name
    • 테이블에서 모든 레코드를 삭제
    • DELETE FROM은 속도가 느림
    • 전체 테이블의 내용 삭제시에는 DELETE보다 유리
    • 단점 2가지
      • WHERE 지원 X
      • 트랜잭션 지원 X

'데브코스 > Week 6' 카테고리의 다른 글

Week 6 - 3  (0) 2024.04.25
Week 6 - 2  (0) 2024.04.23
Week 6 - 1  (0) 2024.04.22

+ Recent posts