동시성 제어(Concurrency Control) / 낙관적 락, 비관적 락
·
DB | SQL
동시성 제어는 여러 사용자가 동시에 같은 데이터를 조회하거나 수정하더라도,데이터의 정합성과 일관성을 보장하기 위해 데이터베이스에서 제공하는 핵심 기능입니다.예매 사이트와 같이 다수의 사용자가 동시에 접근하는 서비스에서는동시성 제어가 제대로 이루어지지 않으면 심각한 문제가 발생할 수 있습니다.예매 사이트에서 동시성 문제가 발생하는 상황경기 예매 사이트를 예로 들어보겠습니다.좌석 A가 1석 남아 있는 상황에서 두 명의 사용자가 거의 동시에 예매 버튼을 눌렀다고 가정하겠습니다.사용자 1이 좌석 A의 남은 수량을 조회거의 동시에 사용자 2도 같은 좌석 A의 남은 수량을 조회두 사용자 모두 “예매 가능” 상태를 확인두 요청이 동시에 티켓 예매 및 좌석 차감 처리 진행동시성 제어가 없다면, 하나의 좌석이 두 번 판..
Programmers / 오랜 기간 보호한 동물(2) / MySQL
·
DB | SQL
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/59411 코드SELECT A.ANIMAL_ID, A.NAMEFROM ANIMAL_INS A JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_IDORDER BY DATEDIFF(B.DATETIME, A.DATETIME) DESC LIMIT 2; MySQL에서 날짜 차이를 구할 때 DATEDIFF, TIMESTAMPDIFF 함수를 사용 DATEDIFF : 날짜1 - 날짜2 DATEDIFF(날짜1, 날짜2); TIMESTAMPDIFF : 단위 기준 날짜2 - 날짜1TIMESTAMPDIFF(단위, 날짜1, 날짜2); - 단위의 종류SECOND : 초MINUTE..
Programmers / 고양이와 개는 몇 마리 있을까 / MySQL
·
DB | SQL
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/59040 코드SELECT ANIMAL_TYPE, COUNT(*) AS countFROM ANIMAL_INS GROUP BY ANIMAL_TYPEORDER BY ANIMAL_TYPE; 처음엔 ANIMAL_TYPE이 개와 고양이 말고도 있지 않을까 싶었고 혹시나 해서 제출했는데 통과가 되었다. SELECT ANIMAL_TYPE, COUNT(*) AS countFROM ANIMAL_INSWHERE ANIMAL_TYPE IN ('Cat', 'Dog')GROUP BY ANIMAL_TYPEORDER BY CASE ANIMAL_TYPE WHEN 'Cat' THEN 1 WHEN 'Dog'..
Programmers / 오랜 기간 보호한 동물(1) / MySQL
·
DB | SQL
문제: https://school.programmers.co.kr/learn/courses/30/lessons/59044 코드SELECT A.NAME, A.DATETIMEFROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_IDWHERE B.ANIMAL_ID IS NULLORDER BY A.DATETIME LIMIT 3; LEFT JOIN으로 B의 ANIMAL_ID가 NULL인 경우 -> 아직 보호소에 있는 동물LIMIT 3으로 상위 3마리만 출력
[Redis] Redis 이해하기
·
DB | SQL
Redis(원격 디렉터리 서버, REmote DIctionary Server)는 주로 애플리케이션 캐시 또는 빠른 응답 데이터베이스로 사용되는 오픈 소스, 인 메모리, NoSQL 키/값 저장소 인메모리 ( In-Memory )컴퓨터의 주기억장치인 RAM에 데이터를 올려서 사용하는 방법RAM에 데이터를 저장하게 되면 메모리 내부에서 처리가 되므로데이터를 저장/조회할 때 하드디스크를 오고가는 과정을 거치지 않아도 되어 속도가 빠름. 하지만 서버의 메모리 용량을 초과하는 데이터를 처리할 경우, RAM의 특성인 휘발성에 따라 데이터가 유실될 수 있음 휘발성➜ 전원이 꺼지면 가지고 있던 데이터가 사라지는 특성 기존 DB가 있는데도 Redis를 사용하는 이유?DB는 데이터를 디스크에 직접 저장(write)하기 때..
[MySQL] 날짜 포맷 사용 / DATE_FORMAT
·
DB | SQL
데이터베이스에 저장된 날짜를 원하는 형태로 표시하기 위해 MySQL에서는 DATE_FORMAT() 함수를 제공합니다. 1. DATE_FORMAT 기본 문법DATE_FORMAT(date, format) date : 변환할 날짜(또는 DATETIME) 값format : 표시할 형식 문자열 (포맷 문자) 2. 자주 쓰이는 포맷 문자 포맷문자설명예시%Y4자리 연도2025%y2자리 연도25%m월 (01~12)03%c월 (1~12)3%d일 (01~31)09%e일 (1~31)9%H24시간 형식 시간 (00~23)14%h 또는 %I12시간 형식 시간 (01~12)02%i분 (00~59)45%S 또는 %s초 (00~59)09%W요일(전체)Sunday%a요일(약어)Sun%M월(전체 이름)January%b월(약어)Jan ..
Programmers / 카테고리 별 상품 개수 구하기 / MySQL
·
DB | SQL
문제: https://school.programmers.co.kr/learn/courses/30/lessons/131529?language=mysql 풀이SELECT LEFT(PRODUCT_CODE, 2) AS CATEGORY, COUNT(PRODUCT_ID) AS PRODUCTSFROM PRODUCTGROUP BY CATEGORYORDER BY CATEGORY LEFT()함수를 사용하면 왼쪽부터 지정한 수 만큼의 문자를 추출할 수 있다.LEFT(문자열 or 컬럼명, 길이)
[MongoDB] 명령어 모음
·
DB | SQL
MongoDB는 document 기반의 NoSQL 데이터베이스입니다. 따라서 데이터 구조를 사전에 강제로 정하지 않아도 되며, 필드명, 구조, 타입이 달라도 에러 없이 저장된다는 특징이 있습니다. 1. 데이터베이스 관련 명령어 명령어 설명show dbs모든 데이터베이스 목록 보기use DB명해당 데이터베이스로 이동 (없으면 생성됨)db현재 사용 중인 데이터베이스 이름 확인db.dropDatabase()현재 선택된 데이터베이스 삭제 2. 컬렉션(테이블) 관련 명령어 명령어 설명show collections현재 DB의 모든 컬렉션 목록 보기db.createCollection("컬렉션명")컬렉션 생성db.컬렉션명.drop()컬렉션 삭제 3. 데이터 조작(CRUD) 명령어📌 Create (삽입) 명령어 ..