mysql 存储过程使用示例

来源:互联网 发布:云计算培训沈阳 编辑:程序博客网 时间:2024/06/05 04:24

1.使用存储过程的好处

1.1 可以根据具体逻辑将多个SQL语句组合在一起执行

2.2 执行速度非常快,存储过程直接存储在数据库服务器中,免去多条SQL语句频繁传输造成的效率低下。


2.存储过程的缺点

2.1 移植性很差,不同数据库的存储过程不能互用


3.示例代码

3.1 全局变量和session变量

*这里说明一下,

@NAME代表创建了一个session变量,这个变量在一次session有用,

@@NAME代表创建了一个全局变量,只要mysql服务存在,变量就有效。通过 show variables 可以查看所有全局变量。

(如character_set_client代表以什么编码输出[控制台,或者程序],character_set_results代表以什么编码插入数据库[insert into])

一般我们手动创建的都是session,不用全局变量。


DELIMITER $DROP PROCEDURE pro_test; CREATE PROCEDURE pro_test()BEGINselect * from user;END $CALL pro_test();-- 输入参数DELIMITER $DROP PROCEDURE findById;CREATE PROCEDURE findById(IN uid INT)BEGINselect * from user where id=uid;END $CALL findById(5);-- 输出参数DELIMITER $-- DROP PROCEDURE setStr;CREATE PROCEDURE setStr(OUT str VARCHAR(20))BEGIN SET str = '这是一个测试字符串';END $CALL setStr(@NAME);select @NAME;-- 输入输出结合DELIMITER $DROP PROCEDURE findByIdReturnStr;CREATE PROCEDURE findByIdReturnStr(INOUT uname VARCHAR(20))BEGIN select * from user where name = uname; set uname = 'CHANG_NAME';END $SET @UNAME = 'name10';CALL findByIdReturnStr(@UNAME);select @UNAME;-- 带条件的存储过程DELIMITER $DROP PROCEDURE term;CREATE PROCEDURE term(IN num INT,OUT tips VARCHAR(20))BEGIN IF num=1 THENSET tips = "一"; ELSEIF num=2 THEN  SET tips = "二"; ELSE  SET tips = "其它值"; END IF;END $SET @TIPS = null;CALL term(3,@TIPS);select @TIPS;-- 带循环的存储过程DELIMITER $-- DROP PROCEDURE getSum;CREATE PROCEDURE getSum(IN num INT,OUT sum INT)BEGINDECLARE i INT DEFAULT 1;DECLARE tempsum INT DEFAULT 0;  WHILE i<=num DOSET tempsum = tempsum+i;SET i = i+1;  END WHILE;SET sum = tempsum;END $SET @SUM = null;CALL getSum(100,@SUM);select @SUM;



0 0
原创粉丝点击