2024/09 61

DBeaver)돈 다루다가 큰일나기 싫으면 Transaction

데이터베이스를 너무 믿으면 안됩니다.간혹가다 INSERT, UPDATE, DELETE가 안되고 실패하는 경우가 많은데 그럼 뭐 다시 시도하면 되긴 합니다만 동시에 여러 쿼리를 실행해야하는데 그 중에 하나만 실패하는 경우여러분들 서비스 운영에 심각한 문제가 발생하는 경우가 있습니다.  예를 들어 여러분이 은행 DB를 운영하는데A 고객 -> B 고객 이렇게 1000원을 보내야한다고 칩시다. 1. 그럼 A 고객의 잔고에서 -1000을 하고 2. B 고객의 잔고에 +1000을 하면 됩니다. UPDATE 문법을 2번 쓰면 되겠군요.  근데 1번은 성공했는데 2번은 실패하면 어떻게되죠? 은행 문닫아야합니다. 문닫기 싫으면 transaction이라는 기능을 사용합시다.       Transaction 기능 위와 같은..

Mysql&DBeaver 2024.09.08

DBeaver)진짜 검색기능은 Full Text search

여러분이 게시판 서비스를 운영한다고 칩시다.그래서 테이블 하나에 게시물의 글내용, 작성자, 발행일을 저장하기 시작했는데  검색기능이 필요해진겁니다. 검색기능은 어떻게 구현하죠?    LIKE 연산자 예전에 간단한 검색기능 만들고 싶으면 컬럼명 LIKE %단어% 하면 된다고 했습니다.짧은 문장 안에서 검색하는건 이걸로 충분하지만 1. % 기호를 맨 앞에 쓰면 인덱스활용을 못하고2. 문장이 좀 길거나 행이 너무 많아지면 LIKE 만으로는 매우 느리게 동작합니다.하지만 full text index를 만들어두면 걱정없습니다.       Full text search를 위한 index  긴 글도 데이터베이스의 컬럼 하나에 보관할 수 있습니다. text 데이터타입 쓰면 6만5천자를 보관할 수 있으니까요. 이렇게 긴..

Mysql&DBeaver 2024.09.08

DBeaver)index 만들기 / 성능평가

index 만들어두면 성능이 향상된다고 했는데 빨리 강의하단에 있는 library.csv 파일 가져와서 얼마나 SELECT 성능이 향상되는지 테스트해봅시다.어떤 도서관의 소장도서 6만권의 정보가 들어있는 데이터셋입니다.   ▲ 근데 csv파일 가져오기할 때 Configure 메뉴에서 데이터타입을 varchar(300) 이상으로 설정해야 잘 가져올 수 있습니다.책이랑 저자 이름 긴게 좀 많아서요         execution plan (실행계획) 분석해보기  SELECT * FROM library WHERE 등록번호 = 'CEM97499' 방금 가져온 테이블에서 책 아무거나 하나만 출력해봅시다. 근데 뭔가 오래걸리는 것 같으면 실행계획부터 분석해봐도 됩니다.   원하는 SELECT 쿼리문에 커서 찍고 D..

Mysql&DBeaver 2024.09.08

DBeaver)index 개념정리

테이블 안에 데이터가 1억개 있는데 거기서 'age' 컬럼이 20인 사람을 찾고 싶으면 어쩌죠? SELECT 명령을 내리면 되는데 그럼 컴퓨터는 1억개의 행을 다 뒤져봐야합니다. (매우느림)그게 싫으면 index를 만들어두면 됩니다.     업다운놀이  방금 1부터 100까지 써있는 카드를 책상에 진열해놨습니다.제가 지금 어떤 숫자를 생각하고 있는지 맞춰보십시오.저는 "예/아니오" 로만 대답할 수 있습니다.   멍청한 사람은 1입니까? / 아뇨2입니까? / 아뇨3입니까? / 아뇨이렇게 계속 물어보겠지만 똑똑한 사람은50보다 큽니까? / 넹그렇다면 75보다 작습니까? /넹그럼 68보다 큽니까? / 아뇨이런 식으로 반을 자르면서 답이 아닌걸 소거합니다. 그럼 훨씬 적은 질문으로 답을 찾아낼 수 있으니까요. ..

Mysql&DBeaver 2024.09.08

DBeaver)procedure, function 안에서 쓸 수 있는 IF

뭘 하든 경우에 따라 다른 코드를 실행하고 싶은 경우가 많습니다. 그럴 때 IF / THEN / ELSE 문법을 사용합시다.    조건에 따라 다른 SQL 문장을 실행하고 싶다 예를 들어봅시다. card테이블의 '사용금액' 컬럼 총 합계를 구하는데총 합계가 500만원이 넘지 않으면 SELECT '분발하세요'총 합계가 500만원이 넘으면 SELECT '잘했어요'를 실행하고 싶으면 어떻게 코드를 짜죠? 예전에 배운 IF() 또는 CASE 써도 가능하겠지만그 문법들은 "이 경우엔 A, 저 경우엔 B를 그 자리에 남겨주세요" 이렇게경우에 따라 문자나 숫자자료를 1개 남겨주는 문법일 뿐이라조건에 따라 SELECT같은 쿼리문은 남기지 못합니다.       조건에 따라 다른 코드를 실행하고 싶으면 IF THEN EL..

Mysql&DBeaver 2024.09.08

DBeaver)procedure와 비슷한 function 문법

실은 procedure와 비슷한 문법이 하나 있습니다.function (함수) 문법인데 용도는 같습니다만 기능만 살짝 다릅니다.procedure 왜 만들어쓴다고 했죠? 그냥 자주 쓰는 긴 코드 한 단어로 만들어놓고 싶을 때 쓴다고 했습니다.function도 똑같음      DBeaver에서 function 만드는 법   ▲ 데이터베이스 누르면 있는 procedure 만드는 곳에서 똑같이 만들 수 있습니다.다만 procedure 말고 function으로 선택하고 이름 아무렇게나 작명하면 됩니다.     ▲ 그리고 똑같이 BEGIN / END 사이에 자주 쓸 코드 집어넣어두고 저장하면 됩니다. 그럼 앞으로 함수명() 사용할 때 마다 BEGIN / END 사이에 있던 긴 코드가 실행됩니다. 용도는 proced..

Mysql&DBeaver 2024.09.08

DBeaver)날짜 & 시간데이터 다루기

오늘은 날짜, 시간 다루는 법을 알아봅시다. 강의하단 csv 파일로 연습용 테이블 하나 생성해서 시작합시다.      날짜 저장하려면  MySQL의 경우 이런 것 중에 고르면 됩니다.  DATEYYYY-MM-DD 형식9999년까지 저장가능DATETIMEYYYY-MM-DD hh:mm:ss 형식9999년까지 저장가능TIMESTAMPYYYY-MM-DD hh:mm:ss 형식2038년까지 저장가능 TIMESTAMP는 현재 DB시간 기록용 말고는 잘 안씁니다.테이블 만들 때 DATETIME(6) 이렇게 1~6 숫자를 넣으면 초단위 소수점 6자리까지 기록해줍니다.    Postgres는 DATE, TIME, TIMESTAMP, TIMESTAMPTZ가 있고YYYY-MM-DD hh:mm:ss 형식으로 저장해주는 TIME..

Mysql&DBeaver 2024.09.08

DBeaver)procedure 많이 만들기 싫으면 파라미터

저번 시간에 procedure 만들면 같은 코드를 쉽게 재사용할 수 있다고 했습니다. SELECT * FROM product WHERE 가격 > 5000;이런걸 procedure로 만들어서 써봤는데그럼 나중에 가격이 6000 이상인걸 조회하고 싶으면 어쩌죠? 그러면 만들어둔 procedure는 아무 쓸모가 없어지겠군요. 하지만 오늘 배울 파라미터 문법을 사용하면 하나의 procedure로 다양한 상황 대응가능  전에 했던 procedure 만드는 코드 DROP PROCEDURE IF EXISTS mart.get_all;DELIMITER $$$$CREATE PROCEDURE mart.get_all()BEGIN SELECT * FROM product where 가격 > 6000;END $$DELIMITER..

Mysql&DBeaver 2024.09.08

DBeaver)procedure에서 많이 쓰는 변수 문법

자료를 잠깐 저장하고 싶으면 변수를 만들어서 사용합니다.변수는 숫자, 문자 등의 간단한 자료를 잠깐 저장해두는 통입니다. 만들어서 사용해봅시다.     변수 문법 변수는 길고 복잡한 자료를 잠깐 보관하는 통일 뿐인데 SET 키워드 이용해서 만들면 됩니다.   SET @age = 20;SELECT @age := 20;SET @변수명 = 저장할값; 문법 쓰면 됩니다. SET @변수명 := 저장할값; 써도 같은 뜻입니다.  SELECT @변수명 := 저장할값; 써도 같은 뜻입니다.셋 중 하나 쓰십쇼 그래서 위처럼 작성하면 age 라는 변수명에 20이라는 값이 저장됩니다.     SET @age = 20;SELECT @age;그럼 앞으로 @변수명이라고 쓸 때마다 그 자리에 저장해뒀던 자료가 남습니다.그래서 위처..

Mysql&DBeaver 2024.09.08

DBeaver) 저장 프로시저 stored procedure 쓰면 간지남

하루에 10번도 더 쓰는 SQL 문장이 있다고 칩시다.그 때마다 직접 문장을 길게 타이핑하는게 귀찮으면  stored procedure (저장프로시저) 를 만들어서 사용하면 됩니다.       stored procedure는 코드 덩어리 저장가능  그래서 SELECT FROM 이런 긴 문장같은걸 저장해서 재사용하고싶으면stored procedure 기능을 사용하면 됩니다. 문장저장기능임  프로그래밍 배경이 있는 분들은 이해가 쉬울텐데그냥 평소에 쓰던 함수 문법이라고 생각하면 됩니다. 그거랑 똑같음 ▲ 이런소리하는 책과 강의가 있으면 당장 불태워야합니다. 프로그래밍 배경이 없으니까 이딴거 읽고있는 것 아님?      stored procedure 쓰는 법  ▲ 전에 JOIN 배울 때 쓰던 product 테..

Mysql&DBeaver 2024.09.08