database
11 posts
트랜잭션 격리레벨, 락, 전파타입 정리

1. 트랜잭션 하나의 논리적인 작업 셋 자체가 100% 적용되거나 또는 아무것도 적용되지 않아야 함을 보장해 주는 것. 2. 트랜잭션의 성질 ACID 원자성(Atomicity) - 트랜잭션 내에서 실행한 작업들은 모두 성공하거나 모두 실패해야한다. 일관성(Counsistency) - 일관성 있는 데이터베이스 상태를 유지해야 한다. (무결성 제약 조건 만족) 격리성(Isolation) - 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 지속성(Durability) - 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다. 3. 트랜잭션 격리레벨 트랜잭션은 원자성, 일관성, 지속성을 보장한다 문제는 격리성 - 격리성을 완벽히 보장하려면 거의 차례대로 실행해야 하는데 이러면 동시성 처리 성능이 매우 나빠진다. ANSI 표준은 트랜잭션 격리 수준을 4단계로 나누어 정의했다. READ UNCOMMITED(커밋되지 않은 읽기) READ COMMITED(커밋된 읽기…

SQL 튜닝

1장. SQL 처리 과정과 I/O SQL 파싱과 최적화 구조적, 집합적, 선언적 질의 언어 사용자 - SQL - 옵티마이저(DBMS 내부 엔진) - 실행계획(Execution Plan) - 프로시저 SQL 최적화 DBMS 내부에서 프로시저를 작성하고 컴파일해서 실행 가능한 상태로 만드는 전 과정 SQL 실행 전 최적화 과정 SQL 파싱 SQL 최적화 다양한 실행경로를 생성해서 가장 효율적인 하나를 선택 로우 소스 생성 실제 실행 가능한 코드 또는 프로시저 형태로 포맷팅 SQL 옵티마이저 최적의 데이터 액세스 경로를 선택해주는 DBMS의 핵심 엔진 옵티마이저의 최적화 단계 후보 실행계획 찾기 데이터 딕셔너리에 미리 수집해 둔 정보를 이용해 각 실행계획의 예상비용을 산정 최저 비용을 나타내는 실행계획을 선택 실행계획과 비용 SQL 옵티마이저가 생성한 처리절차를 사용자가 확인할 수 있게 트리 구조로 표현한 것 옵티마이저 힌트 옵티마이저는 네비게이션 - 네비 경로가 마음에 들지 않을 때 …

MYSQL - 프로젝트 검색 쿼리 마이바티스로 변경

SearchCriteria searchMapper.xml 참고자료 mybatis.org - 동적SQL if, foreach, bind

MYSQL - 프로젝트 검색 쿼리 완성

감격스럽다 출력된 데이터 이후에 할 일 확인 위의 주석에서 을 적어놓은 것은 checkbox 에서 데이터를 넘길 때 여러개를 선택한 경우 이런식으로 넘어가는데 컨트롤러 혹은 마이바티스에서 선택한 개수가 4개라는 것을 알 수 있는지 확인해야 한다 선택 사실 완전한 완성은 아니다. 키워드 검색이 들어 있지는 않기 때문인데, 여러가지 고려사항이 남아있다. 예를들어 키워드 검색에 강남을 입력 했을 때 우주 처럼 지도가 강남으로 포커스되고 그 지도안에 들어있는 모든 게스트하우스를 밑에 나타내게 하고 싶었던 것인데 위의 쿼리문에 추가할 경우 DB로 날려서 새로고침 되어야 하기 때문 애초에 우주와 여기어때를 둘 다 참고해서 UI가 섞인게 원인 우주처럼 나타내는 것을 포기하고 쿼리문에 추가할 것인지 키워드 검색의 위치를 바꾸고 ajax 요청으로 처리할 것인지 선택해야한다 성능 일단 꾸역꾸역 만들기는 했는데 인덱스를 사용한 것도아니고 (들어만 보고 아직 이해를 잘 못하기도 했다) 이것저것 생…

MYSQL - searchview 생성까지의 과정 정리

까먹을까봐

MYSQL - 날짜&인원을 동시에 검색하는 경우 문제해결 (게스트하우스 프로젝트)

문제 스토리보드 확인 작성중인 ERD 확인 Input 날짜&인원을 선택하고 검색버튼을 누른다 등의 데이터가 넘어간다 Output 조건에 맞는 게스트하우스를 출력한다 조건 : 게스트하우스가 가지고 있는 방 중에서 하나라도 2019년 1월 1일부터 3일까지 3일동안 4명의 예약가능한 자리가 남아있어야 한다 조건에 맞게 검색하기 위해서는 검색한 날짜별로 모든 방의 최대수용인원과 이미예약한 인원을 뺀 값을 계산해야 하는데 어떻게 해야하는지 감이 전혀 오지 않았다. 결국 커뮤니티에 질문을…(구루비, Okky, 코드초보스터디카페) 해결 구루비 질문내용과 마농님의 답변 참고 해결방법 달력 테이블 만들기 참고 샘플 테이블, 데이터 넣기 (회원, 게스트하우스, 방, 예약정보 테이블) Oracle 답변을 MySQL로 수정 이후의 과제 사용한 MySQL 쿼리문 전부 해석하고 이해하기 더 사용된 테이블 erd에 추가 이 쿼리 사용해서 나온 방을 하나라도 가지고 있는 게스트하우스를 출력시키기

SQL 시험

3,4,8,9번 문제 틀림 문제1. 각 부서별 평균 급여를 구하되 평균 급여가 2000이상인 부서만 나타내는 SELECT문을 작성하시오 문제2. 각 직책(s_emp.title)별로 급여(s_emp.salary)의 총합을 구하되 직책이 사원인 사람은 제외하시오. 단, 급여총합이 3000이상인 직책만 나타내며, 급여 총합에 대한 내림차순으로 정렬하시오. 문제3. 직급(s_emp.title)이 ‘부장’(영업부장, 지부장 포함)인 사람이 2명 이하인 부서(s_emp.dept_id)가 몇개인지 나타내는 SELECT문을 작성하시오. 문제4. 담당직원(s_customer.sales_rep_id)이 배정되지 않은 고객(s_customer.name)을 모두 나타내는 select문을 작성하시오. 문제5. Primary Key와 Foreign Key에 대해서 아는대로 적으시오. Primary Key Foreign Key 각 행을 구별할 수 있는 컬럼(들) 다른 테이블의 Primary Key 컬럼 No…

SQL 문제풀기 3

임시 저장

(참고) 오라클 SQL 세팅하기(SQL developer + Oracle DB 11g Express)

설치하기 Oracle Database 11g Express Edition 설치 및 사용 방법 오라클 SQL Developer 설치 및 접속하는 방법 DBMS 접속하기 사용자 계정 생성 student 계정에 권한 주기 student계정은 CREATE SESSION권한이 없어서 접근불가 system계정으로 student계정에게 connect, resource권한을 줘야한다. SQL Developer에서 student계정 접속 +버튼(새로만들기/데이터베이스 접속 선택) 누르기 세부사항 입력 테스트 버튼 누르고 성공여부 확인 테스트 성공하면 접속버튼 누르기 CREATE로 테이블 생성해보기 아래의 표를 보고 테이블을 생성하시오.

SQL 문제풀기

GROUP BY와 HAVING 절 문제 1 각 부서(dept_id)별 평균 급여를 계산해서 보여주시오. 문제 2 각 부서(dept_id)별로 직책이 사원인 직원들의 평균 급여를 계산해서 보여주시오. 문제 3 HAVING 각 부서별로 평균 급여를 구하되 평균 급여가 2000이상인 부서만 나타내시오 having : 그룹에 대한 조건은 where절이 아니라 having절에서 기술한다. 문제 4 각 직책(title)별로 급여의 총합을 구하되 직책이 부장이 사람은 제외하시오 단, 급여총합이 8000(만원) 이상인 직책만 나타내며, 급여 총합에 대한 오름차순으로 정렬하시오. 문제 5 SUBGROUP 각 부서내에서 각 직책별로 몇 명의 인원이 있는지를 나타내시오. 문제 6 각 부서별로 급여의 최소값과 최대값을 나타내시오. 단, 최소값과 최대값이 같은 부서는 출력하지 마시오. 참고자료 (예제로 배우는 ORACLE 11g)[https://wikidocs.net/3901]

SQL 문제풀기 2

6.4 직원과 부서테이블을 join하여 사원의 이름과 부서, 부서명을 나타내시오 6.5 alias 사용 6.5 서울 지역에 근무하는 사원에 대해 각 사원의 이름과 근무하는 부서명을 나타내시오 6.6 non-equijoin 각 사원의 이름과 급여등급을 나타내시오 6.7 outer join 이름, 사번, 담당고객 이름. 단, 고객에 대하여 담당영업사원이 없더라도 모든 고객의 이름을 나타내고, 사번순으로 오름차순 정렬 6.8 self join 6.8 self join 직원중에 ‘김정미’와 같은 직책을 가지는 사원의 이름과 직책, 급여, 부서번호를 나타내시오 6.11 set 연산자 from절에서의 subquery 7.7 having 절에서의 subquery 7.7 having 절에서의 가장 적은 평균급여를 받는 직책에 대해 그 직책과 평균급여를 나타내시오. (*****) 7.8 create 절에서의 subquery 컬럼 사이즈 변경 s_emp 테이블의 mailid 길이는 8로 설정되어 있…