컴공지식
-
SQL 뷰가 업데이트 가능하려면?컴공지식/데이터베이스 2024. 6. 16. 16:17
단일 테이블: 뷰는 하나의 기본 테이블만 참조해야 한다. 여러 테이블을 조인하거나 복잡한 쿼리를 사용하는 뷰는 보통 업데이트가 불가능하다. 키 컬럼 포함: 뷰가 기본 테이블의 기본 키(primary key) 컬럼을 포함해야 한다. 단순한 셀렉트: 뷰의 정의가 너무 복잡하지 않아야 한다. 집계 함수(예: SUM, AVG), DISTINCT, GROUP BY, HAVING, UNION 등이 포함된 뷰는 업데이트가 불가능하다. 읽기 전용 아닌 뷰: 뷰가 읽기 전용으로 설정되어 있다면, 당연히 업데이트할 수 없다. 서브쿼리 포함하지 않음: 뷰가 서브쿼리를 포함하지 않아야 한다. 서브쿼리가 들어가면 업데이트가 어려워지기때문 WITH CHECK OPTION: 만약 뷰에 WITH CHECK OPTION이 사용되었다면..
-
세션변수의 할당과 비교컴공지식/데이터베이스 2024. 6. 16. 14:11
할당할 때는 :=를 사용해 변수를 설정하고, 비교할 때는 =를 사용해 변수를 비교하면 된다. 굳이 이렇게 나눈 이유는 그저 가독성을 위해서다. 사용 예: @a := SUM(A) A라는 열의 총 합을 @a라는 변수에 할당 @a = 1000 @a 변수를 1000과 비교 물론, `@a = 1000`으로 할당도 할 수는 있어서 헷갈리는 경우가 있다. 그래서 할당과 비교 연산자는 구분하는 것이 좋다. 추가 예: SET @b := 20; -- 변수 할당 SELECT * FROM table WHERE column = @b; -- 변수 비교
-
트랜잭션 격리 수준컴공지식/데이터베이스 2024. 6. 16. 13:56
각 격리 수준을 쉽게 풀어보자. Read Uncommitted: 다른 사람이 작성 중인 숙제도 베끼는 상황. 데이터 일관성 낮음 Read Committed: 다른 사람이 숙제를 다 끝낸 후 베끼는 상황. 대부분의 db기본 격리 수준임 Repeatable Read: 처음 빌린 책 상태가 끝까지 유지되는 상황. Mysql 기본 격리 수준 Serializable: 혼자 도서관을 빌린 상황. 성능 저하될 수도.. 발생 가능 상황 더티리드: 다른 트랜잭션이 아직 커밋하지 않은 변경사항을 읽을 수 있음 논 리피터블 리드: 동일 트랜잭션 내에서 같은 행을 여러 번 읽을 때 값이 달라질 수 있음. 다른 트랜잭션이 데이터를 수정할 수 있기 때문 팬텀리드: 트랜잭션 동안 새로운 행이 추가되거나 기존 행이 삭제될 수 있음...
-
SQL 윈도우 함수와 집계 함수컴공지식/데이터베이스 2024. 6. 12. 20:36
집계함수란 값을 모두 모으는 느낌의 함수라고 생각하면 된다.예를 들어 SUM, AVG 등이 있다. 윈도우 함수는 GROUP BY와 사용이 불가능하다. 자체에서 GROUP BY 역할을 하는 애가 있는데 그 애는 바로PARTITION BY이다.이 PARTITION BY는 엑셀같은 느낌이라고 생각하면 된다. 우리는 엑셀에서 어떤 열의 총 합을 구하려고 하면 특정 열을 선택하는데, PARTITION BY '집계하고자하는 열' 이런 식으로 명령어를 작성하면 GROUP BY와 동일한 효과를 낸다.그러면 왜 굳이 GROUP BY 절을 놔두고 PARTITION BY를 사용할까? 바로 윈도우 함수인 RANK(), DENSE_RANK(), ROW_NUMBER() 등 사용하기 위해서다.그러니까 큰 차이는 윈도우 함수 적용..