본문 바로가기

CS 과목(CS科目)/데이터 베이스(データベース)

15. concurrency control(Serial schedule, NonSerial schedule) - Part1 이번 concurrency 부분은 난이도가 있는 부분이므로, 시간을 들여서 공부를 하자! 위 예제에 대한 트랜잭션 작성에는 아래와 같이 3가지 case가 있다. case1~3의 트랜잭션의 실행의 결과는 우리가 원한 답이 나온다. 그러나, case 4의 경우, 최종적으로 우리가 원한 답이 나오지를 않는다.(이 이유에 대해서는 지난 번에 설명을 했으므로 여 기서는 설명을 하지 않겠다.) case4와 같이 transaction2의 업데이트 결과가 반영되지 않아서 최종 업데이트된 값(Transaction1의 최종값)이 원하는 값이 나오지 않는 오류, 이러한 오류를 Lost Update 현상 이라고 부른다. read(), write() 등 각각의 작업을 Operation이라고 부른다. case4의 Operatio.. 더보기
14.Transaction Transaction 우선 예제를 한 번 보자!! 위 2개의 SQL문이 모두 정상적으로 실행이 완료되야 지만 이체라는 것이 성립된다. 그런데 만약 2개의 SQL문 중 어느 1개만 정상적으로 실행된 경우에는 어떻게 되버릴까?? 아래에서 살펴 보자!!! 이렇게 되면 J는 100만원 그대로가 되고, H는 200만원에서 220만원이 된다. 갑자기 없던 20만원이 H에게 생겨버렸다. 이렇게 되면, J는 100만원에서 80만원으로 바뀌고, H는 200만원이 그대로 있다. 원래 있던 20만원이 증발해버렸다. 이와 같이 이체라는 작업은, 이 2개의 SQL문이 모두 실행이 돼야 하는 작업이다. 그럼 SQL문을 사용하여 Transaction을 구현해보자 START TRANSACTION RDBMS에게 이제 TRANSACTI.. 더보기
13. Trigger(부제 : 방아쇠를 함부로 땡기지는 말자 ㅋㅋ) Trigger 데이터 베이스에서 어떠 Event가 발생을 하였을 때, 자동적으로 실행되는 프로시저(procedure). 조금 더 자세히 설명을 하면, 데이터에 변경이 생겼을 때, 즉 DB에 INSERT, UPDATE, DELETE(select는 해당x)가 발생을 하였을 때, 이것 이 계기가 되어 자동적으로 실행되는 프로시저(procedure)를 trigger라고 한다. users라는 테이블에서 nickname을 UPDATE하였을 때, UPDATE되기 이전의 {id,nickname}과 변경을 한 시간(until)을 자동적으로 user_log에 저장하는 trigger(procedure)를 만들어 보자. (아래와 같은 결과가 나와야 함) 1.[BEFORE] [UPDATE] 2.ON [users] 3.FOR [.. 더보기
12. stored procedure PART 2 주된 사용 목적이 비즈니스 구현이라는 것은 비즈니스 로직이 Logic tier뿐 아니라 Data tier에 존재할 수도 있다는 뜻이다. stored procedure의 장점 위 그림은 프론트엔드(Presentation tier)를 제외한 백엔드 부분(Logic tier, Data tier)부분만을 나타내고 있다. Logic tier에는 현재 4개의 Spring 서버가 있고, Data tier에는 1개의 MySQL 서버가 있는 상황이다. 4개의 자바 서버는 똑같은 logic으로 이루어 져 있다. 만약 logic을 바꿔줘야 할 때, 4개를 동시에 바꾸면 안된다. 왜냐하면, 4개의 서버를 동시에 바꾸는 동안에 만약 client에서 어떠한 request가 있을 경우, 그 request에 response가 안됨... 더보기
11. stored Procedure PART 1 Stored Procedure 프로시저와 함수의 차이를 알고 가자!!!(이 부분이 이해 안 돼도 괜찮다. 아래 부분에서 자세히 다시 다룬다.) CREATE PROCEDURE product (IN a int, IN b int, OUT result int) IN : INput 매개변수라는 뜻. 즉 매개변수에 값을 받을 수 있을 뿐, BODY 부분에서 그 변수의 값을 변경하지는 못함. OUT : OUTput 매개변수라는 뜻. 즉, 매개변수에 어떤 값을 받을 필요는 없고, BODY 내에서 그 변수에 값을 넣어서 반환시킬 때 사용! (나중에 배울, INOUT이라는 키워드는 위 2가지 기능을 모두 가지고 있다.) -> 만약, 매개 변수 앞에 IN, OUT 중 어느 것도 적혀져 있지 않으면, default로 IN이 .. 더보기
10. stored function Stored Function delimiter $$ 원래 SQL에서의 delimiter는 세미콜론(;)이다. 그러나 우리가 c/c++과 같은 프로그래밍 언어로 함수를 작성할 때에도 끝을 알리는 용도로 세미콜론(;)을 사용을 하는데, SQL에서도 FUNCTION을 작성 시, 명령어의 끝을 알려 주기 위하여 세미콜론(;)을 사용해야 한다. 그런데 이때 문제점이 하나가 있다. FUNCTION을 작성 시, 만약 명령어 해석기가 세미콜론( ; )을 만났을 때, 이 세미콜론이 FUNCTION 내부에서 단순히 명령어의 끝을 알리는 세미콜론을 의미하는지, 아니면 SQL문의 작성이 끝났음을 알리는 세 미콜론인지 구분이 가지가 않는다. 이러한 문제점을 해결하고자 FUNCTION 작성 전, delimiter $$로 SQL문.. 더보기
9. SQL로 데이터 조회하기(SQLでデーター照会)PART 5 ============================================================================================ ORDER BY OREDER의 DEFAULT값은 오름차순(ASC)이다. ASC는 생략이 가능 그럼 attribute dept_id로 1차적으로 오름차순(ASC) 정렬을 하고, attribute salary로 2차적으로 내림차순(DESC)정렬을 하 고 싶을 때는 어떻게 할까?(아래 참조) 위 그림에 의하면 dept_id가 오름차순(ASC) 정렬이 돼 있고, 같은 dept_id들 내의 salary가 내림차순(DESC) 정렬이 돼 있다. 참고로, MySQL에서는 NULL들을 젤 앞에 놔두고 시작을 한다. AGGREGATE FUNCTION 만약 알.. 더보기
8.SQL로 데이터 조회하기(SQLでデーター照会)PART 4 JOIN implicit JOIN vs emplicit JOIN WHERE절 뒤의 E.dept_id = D.id라는 JOIN condition이 있다. 이걸로 eployee 테이블과 department 테이블을 JOIN시켜 준다. 위와 같이 WHERE절 뒤에서 JOIN condition에 의해서 테이블을 JOIN시켜주는 것을 implicit JOIN이라고 한다. 그러나 implicit JOIN 방식은 가독성이 떨어 진다. explicit JOIN 방식으로 아래와 같이 고칠 수가 있다. inner JOIN vs outer JOIN inner JOIN 아래의 그림에서는 inner JOIN과 outer JOIN의 설명을 쉽게 하기 위하여 SQL문을 약간 수정을 하였다. 사실 JOIN이라는 키워드는 앞에 inn.. 더보기