이 기사는 MySQL 저장 프로시저에 대한 자세한 소개(코드 예제)를 제공합니다. 이는 특정 참조 값을 가지고 있으므로 도움이 될 수 있습니다.
1. 저장 프로시저란 무엇입니까?
나중에 사용하기 위해 저장된 하나 이상의 MySQL 문 모음입니다.
저장 프로시저의 개념은 데이터베이스의 SQL 언어 수준에서 코드 캡슐화 및 재사용입니다.
(관련 권장사항: MySQL 튜토리얼)
2. 저장 프로시저를 사용하는 이유
사용하기 쉬운 단위로 처리를 캡슐화하고 복잡한 작업을 단순화
오류 방지 및 데이터 보안 보장
변경 사항 관리를 단순화합니다. (해당 저장프로시저의 코드를 수정하려면 해당 테이블명, 컬럼명 등을 수정하면 된다. 이를 사용하는 사람은 변경사항을 알 필요가 없다.)
성능 향상
Flexible
In 일반적으로 간단하고 안전하며 고성능입니다.
단점:
작성이 SQL 문보다 복잡합니다.
권한 문제(권한이 없을 수도 있고 일반적으로 저장 프로시저를 사용하며 저장 프로시저를 생성할 권한이 없을 수도 있음) )
3. 저장 프로시저 만들기
CREATE PROCEDURE productpricing() BEGIN SELECT Avg(prod_price) AS priceaverage FROM products; END
참고: 명령줄에 입력된 문제
mysql> delimiter // mysql> CREATE PROCEDURE productpricing() -> BEGIN -> SELECT Avg(prod_price) AS priceaverage -> FROM products; -> END //
저장 프로시저가 실제로는 함수입니다
CALL productpricing();
변수는 데이터를 임시로 저장하는 데 사용되는 메모리의 특정 위치입니다.
drop procedure productpricing; drop procedure if EXISTS productpricing;키워드 OUT은 해당 매개변수가 저장 프로시저의 값을 전달하는 데 사용됨을 나타냅니다(호출자에게 반환됨).
MySQL은 IN(저장 프로시저에 전달됨),
OUT(여기서 사용된 저장 프로시저에서 전달됨)
INOUT(저장 프로시저 안팎으로 전달됨) 유형 매개변수를 지원합니다.
저장 프로시저 호출
CREATE PROCEDURE productpricing( OUT p1 DECIMAL(8,2), OUT ph DECIMAL(8,2), OUT pa DECIMAL(8,2) ) BEGIN SELECT MIN(prod_price) INTO p1 FROM products; SELECT MAX(prod_price) INTO ph FROM products; SELECT avg(prod_price) INTO pa FROM products; END;
Query
call productpricing(@pricelow,@pricehign,@priceaverage);
SELECT @priceaverage;
사용 및 사용Create
SELECT @priceaverage,@pricehign,@pricelow;Call
CREATE PROCEDURE ordertotal( IN onumber INT, OUT ototal DECIMAL(8,2) ) BEGIN SELECT sum(item_price*quantity) FROM orderitems WHERE order_num = onumber INTO ototal; END;Query
call ordertotal(20005,@total);6. 스마트 저장 프로시저 구축Bas 지금까지 사용된 모든 저장 프로시저는 사실상 무엇보다도 MySQL의 간단한 SELECT 문을 캡슐화합니다. 모두 저장 프로시저의 유효한 예이지만 이러한 캡슐화된 문을 직접 사용할 수 있는 작업을 수행할 수 있습니다(더 많은 것을 가져올 수 있으면 상황이 더 복잡해집니다). 저장 프로시저의 힘은 비즈니스 규칙과 지능형 처리가 포함될 때에만 분명해집니다.
select @total;다음 코드를 입력합니다.
考虑这个场景。你需要获得与以前一样的订单合计,但需要对合计增加营业税,不过只针对某些顾客(或许是你所在州中那些顾客)。那么,你需要做下面几件事情: 1、获得合计(和以前一样) 2、把营业税有条件的添加到合计 3、返回合计(带或不带税的)
-- Name: ordertotal // 添加注释 -- Parameters: onumber = order number -- taxable = 0 if not taxable, 1 if taxtable -- ototal = order total variable CREATE PROCEDURE ordertotal ( IN onumber INT, IN taxable BOOLEAN, OUT ototal DECIMAL(8,2) ) COMMENT 'Obtain order total, optionally adding tax' BEGIN -- Declare variable for total DECLARE total DECIMAL(8,2); // 声明变量 -- Declare tax percentage DECLARE taxrate INT DEFAULT 6; -- Get the order total SELECT Sum(item_price*quantity) FROM orderitems WHERE order_num = onumber INTO total; -- Is this taxable? IF taxable THEN -- yes,so add taxrate to the total SELECT total+(total/100*taxrate) INTO total; END IF; -- And finally, save to out variable SELECT total INTO ototal; END;
此存储过程有很大的变动。首先,增加了注释(前面放置 --)。在存储过程复杂性增加时,这样做特别重要。 添加了另外一个参数 taxable,它是一个布尔值(如果要增加税则为真,否则为假)。 在存储过程体中,用 DECLARE语句定义了两个局部变量。 DECLARE要求指定变量名和数据类型, 它也支持可选的默认值(这个例子中的 taxrate的默认被设置为 6%)。SELECT 语句变,因此其结果存储到 total(局部变量)而不是 ototal。 IF 语句检查taxable是否为真,如果为真,则用另一SELECT语句增加营业税到局部变量 total。 最后,用另一SELECT语句将total(它增加或许不增加营业税)保存到 ototal。 注意:COMMENT关键字 ,本例子中的存储过程在 CREATE PROCEDURE语句中包含了一个 COMMENT值。 它不是必需的,但如果给出,将在SHOW PROCEDURE STATUS的结果中显示。 这显然是一个更高级,功能更强的存储过程。为试验它,请用以下两条语句: 第一条:
call ordertotal(20005, 0, @total); SELECT @total;
输出:
+--------+ | @total | +--------+ | 38.47 | +--------+
第二条:
call ordertotal(20009, 1,@total); SELECT @total;
输出:
+--------+ | @total | +--------+ | 36.21 | +--------+이 예는 MySQL IF 문의 기본 사용법을 보여줍니다. IF 문은 ELSEIF 및 ELSE 절도 지원합니다(전자는 THEN 절도 사용하고 후자는 사용하지 않음). 다음 장에서는 IF(및 기타 흐름 제어 문)의 다른 용도를 살펴보겠습니다. 7. 저장 프로시저를 확인하세요저장 프로시저를 생성하는 데 사용된 CREATE 문을 표시하려면
BOOLEAN值指定为1 表示真,指定为 0表示假(实际上,非零值都考虑为真,只有 0被视为假)。通过给中间的参数指定 0或1 ,可以有条件地将营业税加到订单合计上。저장 프로시저를 언제, 누가 생성했는지 등을 포함한 목록을 얻으려면
show create PROCEDURE ordertotal;여러 가지가 있습니다. 테이블, like
show procedure status;
로 필터링
위 내용은 mysql 저장 프로시저에 대한 자세한 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!