sql문은 내용이 고정되어 있는 경우가 대부분이지만 상황에 따라 내용 변경이 필요할 때 동적 sql을 사용하면 변경되는 내용을 실시간으로 적용시켜 사용할 수 있다.
prepare와 execute
- prepare : sql문을 실행하지 않고 미리 준비만 해둔다.
- execute : 준비된 sql을 실행한다.
실행한 이후 다시 사용을 하지 않는다면 deallocate prepare로 문장을 해제할 수 있다.
prepare myQuery from 'select * from member where mem_id = "blk"';
execute myQuery; -- 실행이 필요한 시점에서 execute myQuery로 실행
deallocate prepare myQuery;
동적 sql의 활용
prepare문에서는 ?로 향후에 입력될 값을 비워두고, execute에서 using으로 ?에 값을 전달할 수 있다.
실시간으로 필요한 값들을 전달해서 동적으로 sql문이 실행되도록 할 수 있다.
동적 sql활용 예제
보안이 중요한 출입문에서 출입한 내역을 테이블에 기록하는데 이때 출입증을 태그하는 순간 날짜와 시간이 insert문으로 입력되도록 하는 sql문 작성하기
drop table if exists gate_table;
-- 출입기록용 테이블 생성
create table gate_table (
id int auto_increment primary key,
entry_time datetime
);
set @curDate = current_timestamp() -- 현재 날짜와 시간
-- ?를 사용해서 entry_time에 입력할 값을 비워둠
prepare myQuery from 'insert into gate_table values(null, ?)';
execute myQuery using @curDate; -- 앞에서 준비한 @curDate변수를 넣은 후 실행
deallocate prepare myQuery;
select * from gate_table;'데이터베이스' 카테고리의 다른 글
| MySQL 제약조건 (0) | 2023.05.26 |
|---|---|
| MySQL 테이블 (1) | 2023.05.26 |
| MySQL 프로그래밍 (0) | 2023.05.26 |
| MySQL 스토어드 프로시저 (1) | 2023.05.25 |
| MySQL 데이터 형 변환 (1) | 2023.05.25 |