728x90
분류 전체보기
544

[DATABASE] Isolation Level

Dirty Read x = 10, y = 20 일 때 다음 작업을 수행한다고 해보자. transaction 1 transaction 2 read(x) => 10 write(y=70) read(y) => 70 write(x=80) commit rollback(y=20) 그러면 최종적으로 x = 80, y = 20이 되는데 이 때 x는 commit되지 않은 y를 read하여 얻은 결과이다. 이렇게 commit되지 않은 값을 읽는 것을 Dirty Read라고 부른다. Rollback이 일어나지 않은 다른 경우에도 Dirty Read라고 부를 수 있는데 먼저 x = 50, y = 50 일 때 다음 작업을 수행한다고 해보자. transaction 1 transaction 2 read(x) => 50 write(x..

Database 2023.12.05

[DATABASE] Concurrency Control (Schedule, Serializability, Recoverability)

Schedule 여러 transaction들이 동시에 실행될 때 각 transaction에 속한 operation들의 실행 순서를 말한다. read를 r, write를 w, commit을 c라고 표현했을 때 다음과 같이 case 별로 실행 순서를 작성할 수 있다. case 1: r1(K) -> w1(K) -> r1(H) -> w1(H) -> c1 -> r2(H) -> w2(H) -> c2 case 2: r2(H) -> w2(H) -> c2 -> r1(K) -> w1(K) -> r1(H) -> w1(H) -> c1 case 3: r1(K) -> w1(K) -> r2(H) -> w2(H) -> c2 -> r1(H) -> w1(H) -> c1 case 4: r1(K) -> w1(K) -> r1(H) -> r2..

Database 2023.12.04

[JAVA] Singleton Pattern (싱글톤 패턴)

Singleton Pattern (싱글톤 패턴)은 특정 클래스에 대해서 객체 인스턴스가 하나만 만들어질 수 있도록 해주는 패턴이다. 대신 전역 변수를 사용하게되면 애플리케이션이 시작될 때 생성되고 사용하지 않을 경우 자원만 잡아먹는 꼴이 된다. 하지만 싱글톤 패턴은 필요할 때만 객체를 만들 수 있다. 기본 구현 public class Singleton { private static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { //인스턴스가 생성되지 않았다면 생성 if (uniqueInstance null) { uniqueInstance = new Singleton(); } return uni..

Java & Spring 2023.12.02

[DATABASE] Transaction (트랜잭션)

Transaction? A에서 B로 5000원 계좌이체를 한다고할때 다음 2가지 작업이 필요할 것이다. A의 잔고 5000원 감소 B의 잔고 5000원 증가 만약 1번 작업은 성공했고 2번에서 문제가 발생하여 실패한다면 A만 5000원이 감소하게될 것이다. 이를 해결하기위해 트랜잭션은 1, 2 모두 성공해야 작업을 완료하고 둘 중에 하나라도 실패하면 거래 전의 상태로 되돌려준다. 이때 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것을 commit, 하나라도 실패해서 작업 이전으로 되돌리는 것을 rollback 이라 한다. Commit START TRANSACTION; UPDATE account SET balance = balance - 5000 WHERE id = 'A'; UPDATE account..

Database 2023.12.02

[DATABASE] Trigger

데이터베이스에서 변경이 발생했을 때 실행되는 Procedure를 의미 예시1 delimiter $$ CREATE TRIGGER log_user_nickname_trigger BEFORE UPDATE ON users FOR EACH ROW BEGIN INSERT INTO users_log VALUES(OLD.id, OLD.nickname, now()); END $$ delimiter; BEFORE UPDATE ON users FOR EACH ROW는 users 테이블에 각 row에서 update가 일어나기 전에 수행해야한다는 것을 의미한다. OLD는 update 전 users의 tuple을 가르킨다. 예시2 delimiter $$ CREATE TRIGGER sum_buy_prices_trigger AFT..

Database 2023.12.01

[DATABASE] Stored Procedure

사용자가 정의한 프로시저 RDBMS에 저장되고 사용되는 프로시저 구체적인 하나의 task를 수행 예시 delimiter $$ CREATE PROCEDURE product(IN a int, IN b int, OUT result int) BEGIN SET result = a * b; END $$ delimiter; 위 쿼리는 곱셈을 수행하는 프로시저이다. input parameter인 a, b는 IN으로 명시해주고 결과 값 result는 OUT으로 명시해준다. IMPORTANT ;가 끝이라고 판단할 수 있기 때문에 delimiter를 지정해주어야한다. 프로시저 실행 예시 call product(5, 7, @result) select @result; @result는 사용자가 정의한 변수이다. 이 변수에 결과가..

Database 2023.11.29

[DATABASE] Stored Function

사용자가 정의한 함수 DBMS에 저장되고 사용하는 함수 SQL의 select, insert, update, delete에서 사용할 수 있다. 예시 delimiter $$ CREATE FUNCTION id_generator() RETURNS int BEGIN RETURN (1000000000 + floor(rand() * 1000000000)); END $$ delimiter; 위 예시 쿼리는 ID의 맨 앞자리를 1으로 고정하여 생성하는 함수이다. CREATE FUNCTION으로 함수명을 지정한다. RETURNS 뒤에는 반환되는 데이터 타입을 지정해준다. BEGIN ~ END 사이에 실제로 실행해야하는 내용을 작성한다. IMPORTANT ;가 끝이라고 판단할 수 있기 때문에 delimiter를 지정해주어야..

Database 2023.11.27

[DATABASE] ORDER BY, GROUP BY

ORDER BY 조회 결과를 특정 attribute 기준으로 정렬 기본은 오름차순 정렬이며 ASC로 표기 내림차순은 DESC로 표기 SELECT * FROM article ORDER BY created_at [ASC]; 위 쿼리는 작성일 순서로 오름차순 정렬한 article 결과를 반환한다. aggregate function 여러 tuple들의 정보를 요약해서 하나의 값으로 추출하는 함수 대표적으로 COUNT, SUM, MAX, MIN, AVG 함수가 있음 NULL 값들은 제외한다. SELECT COUNT(*) FROM article; 위 쿼리는 article 수를 출력한다. GROUP BY SELECT C.article_id, COUNT(*) FROM comment C GROUP BY C.article..

Database 2023.11.26

[DATABASE] JOIN

정의된 테이블 예시 테이블 명: article attribute type id (PRIMARY KEY) bigint title varchar content varchar created_at datetime 테이블 명: comment attribute type id (PRIMARY KEY) bigint article_id (FOREIGN KEY) bigint content varchar created_at datetime Implicit Join SELECT A.title FROM comment AS C, article AS A WHERE C.id = 1 and C.article_id = A.id; FROM 절에는 table 들만 나열하고 where 절에 join condition을 명시하는 방식 옛날 방..

Database 2023.11.26

[DATABASE] NULL

NULL의 비교 연산자 SELECT id FROM article WHERE created_at IS NULL IS를 사용해야 NULL 값을 비교할 수가 있다. =을 사용한다면 아무것도 출력되지 않는다. three-valued logic NULL의 비교/논리 연산의 결과로 TRUE, FALSE, UNKNOWN을 가지는 것을 의미한다. UNKNOWN이란 TRUE일 수도 있고 FALSE일 수도 있다는 의미이다 SQL에서 NULL과 비교 연산을 하게되면 그 결과가 UNKNOWN이다. 비교 연산자 예제 결과 1 = 1 TRUE 1 != 1 FALSE 1 = NULL UNKNOWN 1 != NULL UNKNOWN 1 > NULL UNKNOWN 1

Database 2023.11.23
728x90