분류 전체보기 287

[DB설계] 인스타그램

전세계적으로 유명한 SNS 서비스인 인스타그램 설계를 도전해봤다.(단순 사진게시판) 1. 요구 사항 분석 요구사항을 분석하는 단계에서는 데이터베이스의 사용 용도를 파악한다. 데이터베이스를 실제로 사용하는 사용자에게 필요한 데이터의 종류와 처리 방법같은 다양한 요구 사항을 수집하고 분석하여 요구 사항 명세서로 작성하는 것이 주요 작업이다. 요구 사항 분석 단계에서 사용자의 요구 사항은 이후의 설계 단계에서 중요하게 사용되며 데이터베이스의 품질의 중요한 기준이 된다. 👨‍👨‍👧‍👦 회원 (Members) 한명의 회원은 여러개의 게시글을 작성할 수 있다. 한명의 회원은 본인이 작성한 게시글을 수정할 수 있다. 한명의 회원은 본인이 작성한 게시글을 삭제할 수 있다. 한명의 회원은 다른회원을 팔로우할 수 있다. ..

DB/DB설계 2022.04.01

[MySQL] SQL ROUND, FLOOR, CEIL 함수

ROUND 란? ROUND 는 정해진 자릿수에 따라 반올림을 하는 역활을 하는 함수입니다. 구하려는 소수점 자리수의 한 자리 아래의 숫자를 반올림 혹은 버림한다. 반올림 여부의 값을 0 또는 생략할 경우 반올림, 음수값일 경우 버림 먼저 반올림의 의미를 알아보자. 반올림이란 구하려는 자리의 한 자리 아래 숫자가 0, 1, 2, 3, 4 일 경우 버리고 5, 6, 7, 8, 9 일 경우 올리는 방법을 뜻한다. ROUND 사용법 ROUND(숫자(컬럼), (반올림 기준)) 숫자(컬럼) : 반올림할 대상 숫자 반올림 기준 : 소수점 자릿 수 지정(필수 아님) 지정하지 않을 경우 소수점 첫번째 자리를 사용한다. SELECT ROUND(10.349) -- 10 SELECT ROUND(10.349, 1) -- 10...

DB/MySQL 2022.04.01

[MySQL] SQL 문자열 자르기 - SUBSTR / SUBSTRING / LEFT / RIGHT

ORACLE에서 문자열 자르기 // 기본 데이터 > SELECT "test@test.com" as email; +---------------------------------------+ | email | +---------------------------------------+ | test@test.com | +---------------------------------------+ SUBSTR(문자열, 시작 위치, 길이) 문자열 : 원하는 문자열(대상 칼럼) 시작 위치 : 시작 위치 길이 : 시작위치 부터 마지막 위치 // SUBSTR 함수 사용하여 문자열 자르기 > SELECT SUBSTR("test@test.com", 1, 3) as email1 , SUBSTR("test@test.com", 1, ..

DB/MySQL 2022.04.01

[MySQL] 원하는 구분자 기준으로 문자열 자르기 : SUBSTRING_INDEX

원하는 구분자 기준으로 문자열 자르기 MySQL document 참고 Mysql에서는 다양한 문자열 자르는 구문이 존재한다. 하지만 특정 문자를 기준으로 문자열을 자를 수 있는 방법이 있다. SUBSTRING_INDEX구문 SUBSTRING_INDEX(문자열, 구분자, 구분자 인덱스) 문자열 : 원하는 문자열(대상 칼럼) 구분자 : 구분자(구분을 나눌 특정 문자) 구분자 인덱스 : 구분자 순번 양의 정수 입력 : 왼쪽부터 오른쪽으로 인덱스 음의 정수 입력 : 오른쪽부터 왼쪽으로 인덱스 // 기본 데이터 mysql> SELECT "test123@test123.com" as email; +---------------------------------------+ | email | +---------------..

DB/MySQL 2022.04.01

[MySQL] ORDER BY 특정 값 우선 정렬 하기 (ORDER BY FIELD)

MySQL에서 ORDER BY 사용 시 특정한 값을 우선적으로 정렬 FIELD 함수를 이용하여 특정한 값을 우선적으로 정렬 할 수 있다. 쿼리를 통해 데이터를 가져올 때 데이터를 기반으로 조건을 걸어서 정렬하고 싶을 때가 있다. 그때 CASE나 FIELD를 사용하면 가능 조건에 따라 데이터의 정렬 우선순위를 정해줄 수 있다. FIELD ORDER BY FIELD (column, 1순위, 2순위, 3순위, n순위...) 어떤 특정 데이터의 값의 정렬을 우선으로 정해서 정렬하고 싶을 때 사용하면 된다. // 기본 테이블 SELECT id, title, status FROM movie ; 1 어벤져스 2 2 극한직업 0 3 타이타닉 1 4 스파이더맨 1 // 특정 컬럼을 order by 구에 지정하여 사용하기..

DB/MySQL 2022.04.01

[MySQL] 저장 프로시저 (Stored Procedure)

1. 저장 프로시저 (Stored Procedure)란? 여러 SQL 문을 하나의 SQL 문처럼 정리하여 CALL ✕ ✕라는 명령으로 실행할 수 있게 만든 것을 저장 프로시저(Stored Procedure)라고 합니다. Stored는 '저장하다', Procedur는 '절차'라는 의미입니다. 즉, 저장 프로시저는 일련의 절차를 정리해서 저장한 것입니다. 사전에 준비 한 많은 명령을 자동으로 실행할 수 있기 때문에, 작업의 효율성도 높일 수 있습니다. 단, 중요한 데이터가 축적된 데이터베이스에서 제대로 검증되지 않은 저장 프로시저를 실행하는 것은 매우 위험합니다. 2. 저장 프로시저 생성 / 호출 저장 프로시저 생성 예) 고객 테이블에서 고객이름순으로 조회한 정보를 저장 프로시저로 생성 DELIMITER $..

DB/MySQL 2022.04.01

[MySQL] 왜래키(Foreign Key) 정리

외래키 사용환경 InnoDB 엔진을 쓰는 테이블에만 사용 가능하다. 옵션 설명 외래키를 지정할 때는 몇가지 옵션이 존재하는데 이 옵션을 정확하게 파악하지 않고 사용하게 되면 나중에 운영에 큰 치명타를 입을 수 있다. //변경제약 ON UPDATE RESTRICT | CASCADE | NO ACTION | SET NULL //삭제제약 ON DELETE RESTRICT | CASCADE | NO ACTION | SET NULL CASCADE A개체를 변경/삭제할때, A개체를 참조하고 있는 모든 개체들이 변경/삭제된다. RESTRICT A개체를 변경/삭제할때, A개체를 참조하고 있는 개체가 존재하면 A개체에 대한 명령(변경/삭제)이 취소된다. NO ACTION MySQL에서는 RESTRICT와 동일함 SET ..

DB/MySQL 2022.04.01

[MySQL] 시간 더하기, 빼기 (DATE_ADD, DATE_SUB 함수)

MySQL 시간 더하기, 빼기 (DATE_ADD, DATE_SUB 함수) MySQL에서 특정 시간을 기준으로 더하거나, 빼야 하는 경우가 있습니다. 이 때 사용하는 함수가 DATE_ADD와 DATE_SUB입니다. DATE_ADD는 기준 날짜에 입력된 기간만큼을 더하는 함수입니다. DATE_SUB는 기준 날짜에 입력된 기간만큼을 빼는 함수입니다. 사용법 - 시간 더하기 DATE_ADD(기준 날짜, INTERVAL) - 시간 빼기 DATE_SUB(기준 날짜, INTERVAL) Example Query DATE_ADD 쿼리 // 현재 시간 > SELECT NOW(); //결과 > 2021-01-17 12:00:00 현재 시간에 1초 더하기 //쿼리 > SELECT DATE_ADD(NOW(), INTERVAL ..

DB/MySQL 2022.04.01

[MySQL] DATETIME 원하는 유형으로 변경 (YYMMDD)

MySQL에서 DATETIME 타입은 YYYY-MM-DD hh:mm:ss 와 같은 형식으로 반환한다. Mysql 공식 문서 12.7 Date and Time Functions 실제로 이걸 이대로 쓴적은 한번도 없는거 같다. 그래서 필요에 따라서 YYYY-MM-DD까지만 짤라서 쓰거나 시분초가 필요없을때는 처음부터 타입을 DATE형으로 지정할때도 있다. DATETIME타입은 YYYY-MM-DD hh:mm:ss 의 형식을 가진다. 반면 DATE타입은 YYYY-MM-DD 의 형식을 가지며 DATE_FORMAT으로 %Y-%m-%d %h:%m:%s 형식을 지정하면 시분초값은 0으로 채워지게된다. FORMAT설명 %M Month 월(Janeary, February ...) %m Month 월(01, 02, 03 ...

DB/MySQL 2022.04.01