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 호출될 때 까지 커밋되지 않음
- autocommit = True
- 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 |