DB 34

트리거

트리거는 자동수행하는. 그러니까 특정 테이블에 insert, delete, update등이 작동할 때 자동으로 실행되게끔 할 수 있음. 일반적으로 after를 많이 씀. 정의는 스토어드 프로시저랑 비슷한데, call로 따로 호출할 수는 없음. 그래서 in, out 등의 매개변수도 불가. delimiter $$ create trigger myTrigger after delete on trigger_table for each row begin set @msg = '가수 그룹이 삭제됨'; end $$ delimiter ; 이렇게 스토어드 프로시저 정의 하듯, delimiter로 시작해서, create trigger 하면서 시작함. after delete는 delete 후에. on trigger_table이라는..

DB 2023.11.15

커서

커서는 테이블의 한 행씩 처리하기 위한 방법. 이번엔 스토어드 프로시저에서 한 행씩 처리하는 방법 커서는 대부분 스토어드 프로시저와 함께 사용 됨 이게 커서 저 화살표 하나씩 처리하는 delimiter $$ create procedure cursor_proc() begin declare memnumber int; declare cnt int default 0; declare totNumber int default 0; declare endofrow boolean default false; declare memcursor cursor for select mem_number from member; declare continue handler for not found set endofrow = true; op..

DB 2023.11.15

스토어드 함수

스토어드 프로시저와 비슷하지만 차이가 있다. 스토어드 프로시저는 여러 SQL문이나 숫자 계산 등의 다양한 용도로 사용하지만, 스토어드 함수는 어떤 계산을 통해서, return을 통해 하나의 값을 반환하는데 주로 사용한다. 스토어드 프로시저는 call로 사용했지만 이거는 select로 사용한다. 마치 sql 내장 함수인 듯 하다. delimiter $$ create function sumFunc(num1 int, num2 int) returns int begin return num1 + num2; end $$ delimiter ; delimiter $$ create function 함수명(인자1 타입, 인자2 타입) returns 반환타입 begin return 반환값; end $$ delimiter ; ..

DB 2023.11.15

스토어드 프로시저2

좀더 자세히 나갈 듯. https://qwefdg3.tistory.com/815 매개변수, 반환값 부분 더 나갈 듯. 매개변수를 in, return을 out 다시 remind 해 보자면(전청조 아님) delimiter $$ create procedure user_proc() begin select * from member; end $$ delimiter ; call user_proc(); delimiter $$ create procedure 프로시저명() begin ~~~ end $$ delimiter ; call 프로시저명(); --프로시저 호출 걍 미리 정해두는 함수 같은거. 여기서 이제 매개변수, return을 추가할거임. DB는 저렇게 drop 이런거 테이블, 스키마등 공통적으로 사용하는 부분이 ..

DB 2023.11.14

인덱스

클러스터형 인덱스 보조 인덱스 고유 인덱스 클러스터형 인덱스 기본키 기본키에 의해 자동으로 정렬됨. 영어사전과 비슷함. 자동정렬. 보조 인덱스 자동정렬 안일어남. 일단은 인덱스 기본 작동 원리부터. (클러스터) 이거 트리 형식임. 이런 식인데, 그러니까 노드? 라는 게 있음. mySql에선 페이지라고 부름 이 페이지는 한 건의 데이터가 아니라, 이런 식으로 어떤 테이블? 처럼 저 각각이 primary key, 더 정확히는 인덱스 라고 보면 됨. 이렇게 트리구조로, 찾아감. 맨 위를 루트페이지, 최 하단 저 페이지들을 리프페이지라고 하는데, 말했다시피 트리구조임. 데이터 많아지면 또 저기서 트리구조로 펼쳐지는 거. 저러 한 페이지들이 테이블마다 다 따로 있는 거. 데이터가 넘치게 되면, 페이지를 분할 시킴..

DB 2023.11.10

뷰 가상테이블

단순 뷰 : 하나의 테이블과 연관된 뷰 복합 뷰 : 2개 이상 테이블 뷰는 가상 테이블로, 바로가기와 비슷. 데이터를 가지고 있지 않음. 뷰는 select에 의해 만들어짐. create view v_member as select mem_id, mem_name, addr from member; select * from v_member; 테이블 생성할 때 처럼 create view 뷰네임 as select 가져올데이터1, 가져올데이터2, .... from 테이블 조회는 테이블이랑 똑같음. 그냥 테이블이라고 생각 하셈. 그러니까 저 select 문을 저장해 뒀다가 뷰를 조회하는 순간 저 쿼리를 날려 가져오는 듯. create view v_member_buy as select b.mem_id, m.mem_nam..

DB 2023.11.09

제약조건

제약조건으로 테이블 견고하게 함 데이터의 무결성을 지키기 위해 하는 것 primary key 등 primary key : 중복 방지, 빈 여백 허용 안됨. 식별키. 테이블 중 하나만 가능 foreign key : 두 테이블을 연결할 때, 그 연결 사이의 무결성을 보장해주는. 외래키의 값이 대상테이블에 존재 해야만 함. unique : 중복 방지, 빈 여백 허용. check : 조건 부여하면 조건에 부합하지 않는 데이터 입력시 걸러줌. 말 그대로 체크 default : 기본값. 딱히 설정 안할 시 null 대신 넣어지는 거? not null : null 방지 그럼 unique에다가 not null 하면 primary key랑 비슷할 듯 외래키로 다른 테이블과 맺어진 후 이 왜래키 값은 변경하거나 바꿀 수 ..

DB 2023.11.08

동적 SQL

동적 쿼리 아니다. 동적 SQL은 sql을 준비해뒀다가 원하는 타이밍에 실행 하는 거다. prepare myQuery from 'select * from member where mem_id = "BLK"'; execute myQuery; deallocate prepare myQuery; 저렇게 prepare 해서 쿼리를 저장해 뒀다가, excute 하면서 실행하면 된다. 그리고 deallocate prepare 해 주면서 해제해줘야 한다. 약간 동적 메모리 해제해주는 그거 같다. prepare 준비할쿼리명 from '쿼리'; execute 준비할쿼리명; deallocate prepare 준비할쿼리명; 인자주기. set @currDate = current_timestamp(); set @aaa = 'asd..

DB 2023.11.07

스토어드 프로시저

스토어드 프로시저는 SQL에 프로그래밍 기능을 추가해 프로그래밍 처럼 다룰 수 있음. DELIMITER $$ CREATE PROCEDURE ifProc1() BEGIN if 100 = 100 then select '100 is equals 100'; end if; END $$ DELIMITER ; call ifProc1(); delimiter $$ create procedure 프로시저명 begin 프로그래밍 end $$ delimiter ; 기본 구조는 이거고, call 프로시저(); 가 실행 그냥 조건에 따라 sql문을 실행하도록 하는 게 목적인 듯. 반복적으로 하거나 변수 등 활용할 수 있고 if문 if (days/365) >= 5 then select '데뷔한 지 ', days, '일이 지났습니다..

DB 2023.11.06

join 연습

고객 이름과 고객이 주문한 도서의 판매가격을 검색 select c.name, b.price, b.bookname from customer c join orders o on c.custid = o.custid join book b on o.bookid = b.bookid; 고객별로 주문한 모든 도서의 총 판매액을 구하고, 고객별로 정렬 select c.name, sum(b.price) from customer c join orders o on c.custid = o.custid join book b on o.bookid = b.bookid group by c.custid; 고객의 이름과 고객이 주문한 도서의 이름 구하기 select c.custid, c.name, b.price, b.bookname fro..

DB 2023.11.03