본문 바로가기
Database/MYSQL

Mysql - procedure 사용법 - 2

by 반화넬 2023. 8. 1.
반응형

안녕하세요.

오늘은 프로시져 사용에 대한 두번째 자료를 업로드 할려고 합니다. 너무 자세한 설명보다는 사용 가능한 부분위주로 설명을 하기 때문에 부족한 부분이 많을거에요. 부족한부분은 다른 글이나 구글링을이용해주세요

 

Mysql procedure
Mysql procedure

TRANSACTION 실행부

1. 수행된 데이터 작업들을 DB에 적용할지 취소할지 결정하는 처리부
2. COMMIT: 하나의 트랜잭션이 성공적으로 끝났을 때 사용
3. ROLLBACK : 비정상적으로 종료되어 다시시작하거나 연산을 취소할 때 사용

 

 

Delimiter ~ Begin

DELIMITER $$  구분자

USE `DB_NAME`$$          //  사용할 디비명

DROP PROCEDURE IF EXISTS `p_프로시져명`$$   // 같은 이름이 있으면 삭제

CREATE DEFINER=`생성자`@`생성자아이피` PROCEDURE ` p_프로시져명`(            
	IN pageNo INT UNSIGNED			-- 페이지 번호
	,IN pagePerCnt INT UNSIGNED			-- 페이지 당 노출 건수 (Limit)
	,OUT retVal int					-- 리턴값
)
    MODIFIES SQL DATA
    COMMENT '프로시져 설명'
> CREATE DEFINER=`생성자`@`.생성자아이피%`

  DEFINER  : 접근권한  // DB에 접속하는 ID명을 적어준다.
  =>
명시 안할경우 DEFINER=CURRENT_USER() 로 설정됨

> Modifies sql data : modifies sql data 함수는 데이터베이스에 저장된 데이터를 수정할 수          있는 명령문이 포함되어 있음을 의미한다.
> Comment : VARCHAR(64)를 지원 
 

예제1

 

# 필요 테이블

DROP TABLE log_price;
CREATE TABLE `log_price` (
	auto_num NT(11) NOT NULL AUTO_INCREMENT COMMENT '자동증가',
	u_id NT(11) NOT NULL AUTO_INCREMENT COMMENT 'u_id',
	p_id NT(11) NOT NULL AUTO_INCREMENT COMMENT 'p_id',
	amount NT(11) NOT NULL AUTO_INCREMENT COMMENT '가격',
	total NT(11) NOT NULL AUTO_INCREMENT COMMENT '총계',
	ins_date DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '최종변경일자',
	PRIMARY KEY (auto_num)
) ENGINE=INNODB COMMENT='설명 '

# 기본 예제 프로시져

DELIMITER $$

USE `UI`$$

DROP PROCEDURE IF EXISTS `p_user_price`$$

CREATE DEFINER=`root`@`%` PROCEDURE `p_user_price`(user_id VARCHAR(50))
BEGIN

	SELECT u_id,SUM(total)
	FROM log_price
	WHERE u_id = user_id
	GROUP BY u_id;

	END$$

DELIMITER ;

CALL user_price(1000);

 

# 쿼리 실행 결과

Mysql procedure
Mysql procedure

 

# 프로시져 실행 결과

Mysql procedure
Mysql procedure

 

프로시져를 하나둘 설계하다보면 쉽게 생성이 되지만 기본적으로 테이블 구조 설계가 잘되어 있어야만 프로시져내부에서의 쿼리도  짧고 가볍게 설계가 가능합니다. 또한 Data 컬럼 길이도 data에 맞게 등록을 해주면 더욱 좋겠죠.

 

DB 어렵게 생각하지 마시고 친구처럼, 가족처럼 생각해보세요. 

 

감사합니다.

반응형