SQL & Database Part3

남재상·2025년 3월 1일
post-thumbnail

SQL & Database to CodingApple

코딩애플 강의를 통해 배운 SQL & Database를 정리한 글입니다.

📅 작성일

2025년 3월 01일


📌 목차

  1. 소개
  2. part3-1 : 저장 프로시저 stored procedure 쓰면 간지남
  3. part3-2 : procedure에서 많이 쓰는 변수 문법
  4. part3-3 : procedure 많이 만들기 싫으면 파라미터
  5. part3-4 : 날짜 & 시간데이터 다루기
  6. part3-5 : procedure와 비슷한 function 문법
  7. part3-6 : procedure, function 안에서 쓸 수 있는 IF
  8. part3-7 : index 개념정리
  9. part3-8 : index 만들기 / 성능평가
  10. part3-9 : 진짜 검색기능은 Full Text search
  11. part3-10 : 돈 다루다가 큰일나기 싫으면 Transaction
  12. part3-11 : 데이터베이스 필요하면 빌려쓰는 것도 (AWS)
  13. part3-12 : Trigger 사용하기
  14. part3-13 : 엔티티 관계도 쉽게 잘그리는 법 (ERD)
  15. part3-14 : 서버에서 DB 사용하려면 (nodejs 환경)
  16. 참고 자료

📝 소개

Part 3 : Part 3


part3-1

🔹 stored procedure

  • 프로그래밍의 함수문법이랑 같음
-- Database / Procedures / Source
CREATE PROCEDURE mart.get_all()
begin
	select *
	from product
	where 가격 > 5000;
END

-- sql
call mart.get_all()

🔹 sql코드로 procedure 생성

  • 수정은 그냥 삭제하고 새로생성하는게 좋음
DELIMITER $$
$$
CREATE PROCEDURE 데이터베이스.프로시저명()
begin
	코드;
END
$$
DELIMITER;

-- sql
call 데이터베이스.프로시저명

part3-2

🔹 변수

  • 같은 문자, 숫자 자료가 자주 출현할 때 사용
set @hello = '안녕하세요 반갑습니다';
select @hello

-- procedure에서 변수생성
DELIMITER $$
$$
CREATE PROCEDURE 데이터베이스.프로시저명()
begin
	declare 변수1 int default 123;
	select 변수1
END
$$
DELIMITER;

part3-3

🔹 파라미터

  • 파라미터값에 따라 procedure안의 코드를 가변적으로 사용
DELIMITER $$
$$
CREATE PROCEDURE 데이터베이스.프로시저명(구멍 int)
begin
	select *
	from product
	where 가격 > 구멍
END
$$
DELIMITER;

call 데이터베이스.프로시저명(7000)

🔹 procedure안의 자료 바깥으로 꺼내기

DELIMITER $$
$$
CREATE PROCEDURE 데이터베이스.프로시저명(out 구멍 int)
begin
	set 구멍 = 20;
END
$$
DELIMITER;

call 데이터베이스.프로시저명(@변수);
select @변수;

part3-4

🔹 날짜

  • 날짜, 시간 형식은 문자랑 비슷하게 취급함
  • 현재시간은 now() 를 사용
select *
from date_test.blog
where
	발행일 > '2022-03-09 23:24:25'

🔹 date_format

  • 날짜 포매팅
select date_format('2022-03-09 23:24:25' , '%y년 %m월 %d일이에요~!')

part3-5

🔹 function

  • 날짜, 시간 형식은 문자랑 비슷하게 취급함
  • 현재시간은 now() 를 사용
-- procedures
CREATE FUNCTION mart.yen(구멍 int)
RETURNS INT
DETERMINISTIC
begin
	return 구멍 * 0.1 + 50;
END

-- sql
select yen(가격)
from mart.product

🔹 DETERMINISTIC

  1. 구멍에 뭘 넣어도 항상 같은 값을 RETURN 하면 DETERMINISTIC

  2. SQL 문법을 사용안하면 NO SQL 표기해야하고

  3. 안에 SELECT를 사용하면 READS SQL DATA

  4. 안에 INSERT DELETE를 사용하면 MODIFIES SQL DATA


part3-6

🔹 IF

  • 날짜, 시간 형식은 문자랑 비슷하게 취급함
  • 현재시간은 now() 를 사용
IF 조건식1 THEN
  조건식1이 참이면 실행할 쿼리문;
ELSEIF 조건식2 THEN
  조건식2가 참이면 실행할 쿼리문;
ELSE
  그게 아니면 실행할 쿼리문;
END IF;

part3-7

🔹 index

  • B-tree, B+tree 를 이용해서 구하는법이 있다고함
  • Primary key 컬럼은 따로 index를 만들 필요가 없다

part3-8

🔹 index 만들기

  • 테이블의 indexs클릭 후 인덱스 생성
  • 확실히 빨라진다
  • primary key는 인덱스 없어도 빠르다

🔹 다중컬럼 index

  • cardinality가 높은 컬럼을 순으로 한다

part3-9

🔹 검색기능

  • Full text index + MATCH() AGAINST() 이용
  • 긴 글에 있는 모든 단어를 뽑아서 정렬해주고 그 단어가 어떤 행에 출몰중인지를 확인하여 뽑아냄
  • 2자 이하는 검색이 안됨
select *
from index_test.library
where match(서명) against('부동산')
-- IN BOOLEAN MODE 사용하자

🔹 ngram parser

  • 띄어쓰기, 순서를 잘못써도 검색이 가능

part3-10

🔹 Transaction

  • 전체 쿼리중 하나가 실패하면 전체쿼리 취소
start transaction

insert into mart.product values(100,'a','a',1,1);
insert into mart.product values(100,'b','b',2,2);

-- 취소
rollback;

-- 적용
commit;

part3-11

🔹 서버

  • 올해부터 RDS를 '퍼블릭 액세스 허용'으로 사용시 Public IPv4 사용요금 명목으로 월 3달러정도 추가요금이 발생해서 한 번 만들어보고 안쓰면 삭제합시다.

  • Azure가면 MySQL 유동서버 이런 것들도 만들기 쉬운데 IPv4 이용요금은 없고

  • Supabase 가면 무료로 PostgreSQL 500MB 호스팅받을 수 있습니다.

  • 구글의 Cloud SQL 사용해도 되는데 신규가입시 6개월 이용가능한 $300 크레딧을 줍니다.


part3-12

🔹 Trigger

  • 자동으로 다른코드 실행되게 만들기
DROP TRIGGER IF EXISTS db명.트리거이름;
DELIMITER $$
CREATE TRIGGER db명.트리거이름
AFTER INSERT ON db명.테이블명
FOR EACH ROW
BEGIN

  실행할코드~~

END $$
DELIMITER ;

part3-13

🔹 ERD

  • 어떤 데이터가 들었는지, 어떤 테이블들이 서로 관련있나 파악하기 쉽다
  • lucid를 통해 만들어보자

part3-14

🔹 server.js확인


📚 참고 자료

profile
작은 코드 하나에도 책임을 담는 개발자입니다!

0개의 댓글