MYSQL 存储过程与存储函数

存储过程

输入参数 IN

DROP PROCEDURE IF EXISTS test_in;
DELIMITER //
CREATE PROCEDURE test_in (IN a INTEGER)
BEGIN
DECLARE v VARCHAR(20); #declare 局部变量声明方式 @符全局变量声明
if a=1 THEN
SET v='111';
ELSE
SET v='000';
END IF;
INSERT INTO t_procedure (mark) VALUE (v);
END;
//
# 调用存储过程
call test_in(1);

输出参数OUT

#此时INOUT(即可为输入参数也可为输出参数) 输出结果也一样 
DROP PROCEDURE IF EXISTS test_out;
DELIMITER //
CREATE PROCEDURE test_out (OUT a INTEGER)
BEGIN
select COUNT(1) INTO a from t where id<10;
END;
//
# 调用存储过程
call test_out(@b);
select @b; # 9

IN、OUT参数组合使用

DELIMITER // #声明结束符// 避免和存储过程中分号冲突
CREATE PROCEDURE proc_count (IN id INT, OUT t_count INT)
READS SQL DATA
BEGIN
SELECT count(1) INTO t_count FROM t_procedure where id>0;
END
// # 结束

call proc_count(4, @a);
select @a; #2

while循环

DROP PROCEDURE IF EXISTS pro10;
create procedure pro10()
BEGIN
declare i int;
set i=1;
while i<12 DO
select * from test where id<i;
set i=i+1;
end while;
end;
call pro10();

查看存储过程详情示例

SHOW PROCEDURE STATUS LIKE 'test_in';

存储函数

DROP FUNCTION IF EXISTS func_test;
CREATE FUNCTION func_test(param_id INT)
RETURNS INT(10)
BEGIN
RETURN(select count(1) from t where id < param_id);
END;
##调用存储函数
select func_test(100); ## 99

查看存储函数详情示例

SHOW FUNCTION STATUS LIKE 'func_test';

分析sql语句

查看具体sql耗时

select * from t where a BETWEEN 0 AND 1000 and b BETWEEN 1000 AND 50000;
show PROFILES;
show PROFILE for query 34;
statusduration
starting----
checking permissions6E-6
Opening tables1.9E-5
init2.5E-5
System lock1E-5
optimizing1.2E-5
statistics8.2E-5
preparing1.4E-5
executing3E-6
Sending data0.000658
end4E-6
query end3E-6
closing tables7E-6
freeing items2.7E-5
cleaning up1E-5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值