DROP PROCEDURE IF EXISTS 프로시저명
- 기존에 프로시저가 존재한다면 DROP 시킨다.
CREATE PROCEDURE '프로시저명'(IN 들어올 파라미터명과 타입, OUT 나갈 파라미터명과 타입): 프로시저명에 맞는 프로시저 생성BEGIN (로직) END: 프로시저가 타면서 일어날 로직의 시작과 끝DECLARE 사용할 변수명 변수타입 default (디폴트로 설정할 값): 자바에서 쓰는 변수처럼 프로시저 안에서 사용할 변수를 선언SET (DECLARE에서 선언한 변수)= 대입할 값: 원하는 값으로 세팅한다.IF (조건값) THEN (조건에 맞을 경우 실행될 로직) END IF: IF문 문법ELSEIF: ELSE IF 문법마지막에 실행된 쿼리가 동작하면서 result값이 select되서 반환된다.
인덱스
인덱스를 효과적으로 사용하는 방법
- Where절에 자주 사용하는 열에 사용
- 선택도 이슈 : 데이터의 중복이 높은 열은 인덱스를 만들어도 효과X
- 클러스터형 인덱스는 테이블 당 하나만 생성
- 사용하지 않은 인덱스는 제거
- 고려사항 : 쿼리 수행 빈도, 업무상 중요도, DML 부하 등
기본키와 고유키는 중복값 허용x
create table table1( col1 int primary key, col2 int, col3 int ); show index from table1;
보조 인덱스
create table table2 ( col1 int primary key, col2 int unique, col3 int unique ); show index from table2;
table 생성
drop table if exists buy, member; create table member( mem_id char(8), mem_name varchar(10), mem_number int, addr char(2) ); insert into member values('TWC','트와이스',9,'서울'); insert into member values('BLK','블랙핑크',4,'경남'); insert into member values('WMN','여자친구',6,'경기'); insert into member values('OMY','오마이걸',7,'서울'); select * from member;
클러스터형 인덱스로 생성된 열
alter table member add constraint primary key(mem_id); select * from member;
primery key 제거 후 primery key 변경
이름이 순서에 맞춰 정리
alter table member drop primary key; alter table member add constraint primary key(mem_name); select * from member;
추가 데이터 입력
insert into member values('GRL','소녀시대',8,'서울'); select * from member; drop table if exists member; create table member( mem_id char(8), mem_name varchar(10), mem_number int, addr char(2) ); insert into member values('TWC','트와이스',9,'서울'); insert into member values('BLK','블랙핑크',4,'경남'); insert into member values('WMN','여자친구',6,'경기'); insert into member values('OMY','오마이걸',7,'서울');
보조인덱스 생성
- 데이터의 내용과 차례는 그대로, 순서나 내용 변경x
- 동물사전의 찾아보기가 생성된 것으로 내용 변경x
alter table member add constraint unique(mem_id); select * from member; alter table member add constraint unique(mem_name); select * from member; # values값 추가 insert into member values('GRL','소녀시대',8,'서울'); select * from member;
table 생성
drop table if exists member; CREATE TABLE member -- 회원 테이블 ( mem_id CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디(PK) mem_name VARCHAR(10) NOT NULL, -- 이름 mem_number INT NOT NULL, -- 인원수 addr CHAR(2) NOT NULL, -- 지역(경기,서울,경남 식으로 2글자만입력) phone1 CHAR(3), -- 연락처의 국번(02, 031, 055 등) phone2 CHAR(8), -- 연락처의 나머지 전화번호(하이픈제외) height SMALLINT, -- 평균 키 debut_date DATE -- 데뷔 일자 ); INSERT INTO member VALUES('TWC', '트와이스', 9, '서울', '02', '11111111', 167, '2015.10.19'); INSERT INTO member VALUES('BLK', '블랙핑크', 4, '경남', '055', '22222222', 163, '2016.08.08'); INSERT INTO member VALUES('WMN', '여자친구', 6, '경기', '031', '33333333', 166, '2015.01.15'); INSERT INTO member VALUES('OMY', '오마이걸', 7, '서울', NULL, NULL, 160, '2015.04.21'); INSERT INTO member VALUES('GRL', '소녀시대', 8, '서울', '02', '44444444', 168, '2007.08.02'); INSERT INTO member VALUES('ITZ', '잇지', 5, '경남', NULL, NULL, 167, '2019.02.12'); INSERT INTO member VALUES('RED', '레드벨벳', 4, '경북', '054', '55555555', 161, '2014.08.01'); INSERT INTO member VALUES('APN', '에이핑크', 6, '경기', '031', '77777777', 164, '2011.02.10'); INSERT INTO member VALUES('SPC', '우주소녀', 13, '서울', '02', '88888888', 162, '2016.02.25'); INSERT INTO member VALUES('MMU', '마마무', 4, '전남', '061', '99999999', 165, '2014.06.19'); create table cluster( mem_id char(8), mem_name varchar(10) ); INSERT INTO cluster VALUES('TWC', '트와이스'); INSERT INTO cluster VALUES('BLK', '블랙핑크'); INSERT INTO cluster VALUES('WMN', '여자친구'); INSERT INTO cluster VALUES('OMY', '오마이걸'); INSERT INTO cluster VALUES('GRL', '소녀시대'); INSERT INTO cluster VALUES('ITZ', '잇지'); INSERT INTO cluster VALUES('RED', '레드벨벳'); INSERT INTO cluster VALUES('APN', '에이핑크'); INSERT INTO cluster VALUES('SPC', '우주소녀'); INSERT INTO cluster VALUES('MMU', '마마무');
- mem_id를 primary key로 설정 : 클러스터형 인덱스 구성
- 데이터 페이지가 정렬되고 균형 트리 형태의 인덱스 형성
alter table cluster add constraint primary key(mem_id); select * from cluster;
- 보조 인덱스 구성하기
- 보조 인덱스를 테스트 하기 위한 테이블
create table second( mem_id char(8), mem_name varchar(10) ); INSERT INTO second VALUES('TWC', '트와이스'); INSERT INTO second VALUES('BLK', '블랙핑크'); INSERT INTO second VALUES('WMN', '여자친구'); INSERT INTO second VALUES('OMY', '오마이걸'); INSERT INTO second VALUES('GRL', '소녀시대'); INSERT INTO second VALUES('ITZ', '잇지'); INSERT INTO second VALUES('RED', '레드벨벳'); INSERT INTO second VALUES('APN', '에이핑크'); INSERT INTO second VALUES('SPC', '우주소녀'); INSERT INTO second VALUES('MMU', '마마무'); insert into second values ('SPC','우주소녀'); insert into second values ('MMU','마마무'); alter table second add constraint unique (mem_id); select * from second;
인덱스를 사용할 때
인덱스를 사용하지 않을 때
SQL & 파이썬 연결