Mysql存储过程简单学习

来源:互联网 发布:域名 daddy 编辑:程序博客网 时间:2024/06/07 16:44

一、存储过程

存储过程是SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快。

二、存储过程的优点:

  1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

  2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

  3.存储过程可以重复使用,可减少数据库开发人员的工作量。

  4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。

三、MySQL 存储过程特点 
1.创建 MySQL 存储过程的简单语法为:
create procedure 存储过程名字()( [in|out|inout] 参数 datatype)
begin
   MySQL 语句;
end;
IN表示输入参数;OUT表示输出参数; INOUT表示既可以是输入,也可以是输出。MySQL 存储过程参数如果不显式指定“in”、“out”、“inout”,则默认为“in”。习惯上,对于是“in” 的参数,我们都不会显式指定。
2.调用Mysql存储过程
eg: call 存储过程name([参数]);

3、变量

   (1).局部变量       

使用DECLARE来声明,作用范围在begin和end之间。DEFAULT赋默认值。

DECLARE counter INT DEFAULT 0;  - 默认为0

(2).用户变量

使用set

set @i=0  @i为用户变量

四、创建存储过程例子
1.创建带有in类型参数的存储过程。

DELIMITER $$CREATE PROCEDURE deleteUserById(IN u_id INT)BEGINDELETE FROM USER WHERE id=u_id;END $$DELIMITER ;

2.创建带有in类型参数和out类型参数的存储过程。

DELIMITER $$CREATE PROCEDURE deleteUserAndReturnUserNum(IN u_id INT,OUT usernum INT)BEGINDELETE FROM USER WHERE id=u_id;SELECT COUNT(id) FROM USER;END $$DELIMITER ;
3.创建带有多个out类型参数的存储过程。

CREATE PROCEDURE deleteUserByAgeAndReturnUser(IN u_id INT,OUT delnum INT,OUT usernum INT)BEGINDELETE FROM USER WHERE id=u_id;SELECT ROW_COUNT() INTO delnum;SELECT COUNT(id) FROM USER INTO usernum;END $$DELIMITER ;

CALL deleteUserByAgeAndReturnUser(5,@a,@b);

select @a,@b

结果:




原创粉丝点击