트랜잭션 격리 수준에 대해 알아보겠습니다. 트랜잭션에 대해 궁금하다면 이전에 포스팅된 트랜잭션을 확인해 주세요. 트랜잭션 격리 수준 이란? 트랜잭션끼리 일관된 데이터를 얼마나 허용할 것 인지 정하는 수준입니다. 격리 수준에는 총 4개의 레벨이 존재합니다. 격리 수준의 레벨 Read uncommitted - 커밋되지 않은 데이터 읽기 Read committed - 커밋된 데이터만 읽기 (대부분의 DB의 Default Isolation Level) Repeatable Read - 읽는 동안 수정/삭제 불가능 (MySQL의 Default Isolation Level) Serializable - 완벽한 일관성 모드를 제공한다. 이상 현상이 발생하지 않는다. 또 각각의 단계 별로 일어날 수 있는 현상들로는 3개의..
오늘은 Transaction에 대해 알아보겠습니다. Transaction 이란? - 데이터 베이스의 상태를 변화시키기 위한 하나의 단위 데이터 베이스의 상태를 변화시킨다는 것은 뭘까요? 예를 들어 아래와 같은 테이블이 존재한다고 가정합니다. 각 사용자의 현재 보유한 금액을 저장하는 테이블입니다. 테이블 1. ID 이름 보유한 금액 1 이이원 1000 2 이우지 2000 해당 테이블에 INSERT, UPDATE, DELETE로 상태를 변화시킬 수 있습니다. 밑의 예시 Transaction에서 2개의 행위가 이루어질 수 있습니다. Transaction 1. "ID가 1인 사용자의 보유한 금액을 2000으로 변경하세요." (INSERT) "ID가 2인 사용자를 삭제하세요." (DELETE) 이러한 행위가 이루..
개발서버에서 테스트하던 와중에 오랜 시간이 지난 후 WAS에서 DB로 요청을 하게 하였더니 java.sql.SQLNonTransientConnectionException: (conn=18546) Connection reset 에러가 발생하였습니다. 확인해 보니 서버 DBCP 설정에 spring.datasource.dbcp2.test-on-borrow 설정이 'true'로 되어 있었습니다. connection pool에서 connection을 가져올 때 해당 connection이 유효한지 검증을 할 수 있게 설정하는 옵션이었습니다. 해당 옵션으로 인해 spring.datasource.dbcp2.validation-query에 설정된 쿼리가 동작하였습니다. 하지만 validation-query가 동작하였을 ..
테스트를 위해 데이터를 Insert 하던 중 LocalDateTime으로 변환할 수가 없어 에러가 발생하였습니다. H2 Database의 프로그램 실행 시 기본 실행되는 sql파일인 import.sql 에 PARSEDATETIME('Sat, 3 Feb 2001 03:05:06 GMT', 'EEE, d MMM yyyy HH:mm:ss z') 형식으로 시도해 봤으나, 날짜 중 월을 영어로 간략히 표시한 'Feb'를 파싱할 수 없어 에러가 발생. 3번째 인자로 Locale값을 추가하니 정상 동작하였습니다. PARSEDATETIME('Sat, 3 Feb 2001 03:05:06 GMT', 'EEE, d MMM yyyy HH:mm:ss z', 'en') 그 후 날짜 중 일에 해당하는 부분의 length가 1~2로..
SQLD 43회 시험 시험일: 2021년 11월 20일(토) 시험시간: 오전 10:00 ~ 11:30 (1시간 30분) 응시료: 50,000 발표일: 2021년 12월 17일(금) 총 50문제 문항 당 2점 1 과목 - 데이터 모델링의 이해 : 총 10문제 중 4문제 이상(20점 중 8점) 맞춰야 합격 2 과목 - SQL 기본 및 활용 : 총 40문제 중 16문제 이상(80점 중 32점) 맞춰야 합격 두 과목 다 과락이 아닌 상태에서 100점 중 60점을 넘겨야 함. 시험장 입실은 8:30 쯤 했었고 신분증은 *필수* 니까 절대 빼먹지 말아야 합니다~ (앞 자리 분 신분증 안 가져와서 퇴실 당하셨습니다.) 웹 개발자로 실무 5년정도 한 상태에서 어느 정도 지식이 있었을 때 SQL 자격검정 실전문제 1, ..
Mysql 통계 일 별 쿼리 작성 시 특정 범위에 없는 날짜 채우는 법 Oracle의 경우 계층적 질의를 사용하면 해소가능 하나 Mysql은 계층적 질의가 없다. SELECT DATE_FORMAT(baseDate, '%Y%m%d') AS baseDate FROM (SELECT adddate('1970-01-01',t4.i * 10000 + t3.i * 1000 + t2.i * 100 + t1.i * 10 + t0.i) baseDate from (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) ..
count(*) - null 값 포함 count(column) - column에 null값이 있으면 count되지 않는다.