MySQL存储过程

来源:互联网 发布:linux can总线编程 编辑:程序博客网 时间:2024/06/05 10:04

存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理;有以下优点:

1).增强SQL语句的功能和灵活性

2).实现较快的执行速度

3).减少网络流量

1.存储过程语法结构

CREATE

[DEFINER = { user|CURRENT_USER}]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...]routine_body


proc_parameter:

[IN|OUT|INOUT] param_name type ;其中IN 表示该参数的值必须在调用存储过程时指定;OUT 表示该参数的值可以被存储过程改变,并且可以返回;OUT 表示该参数的值调用时指定,并且可以被修改和返回

2.过程体(routine_body)

过程体有合法的SQL语句构成;可以是简单的SELECT或INSERT语句;如果为符合结构则使用BEGIN...END语句;复合结构可以包含声明、循环、控制结构

3.存储过程的调用

CALL sp_name([parameter,..])

CALL sp_name[()]

eg:CREATE PROCEDURE 任意名字() SELECT VERSION();//创建一个存储过程
CALL 任意名字();//这是调用存储过程,结果返回一个版本号信息

4.删除存储过程

DROP PROCEDURE [IF EXISTS] sp_name

5.举例创建一个含in参数的存储过程

mysql> DELIMITER //
mysql> CREATE PROCEDURE removeUserById(IN id INT UNSIGNED)
-> BEGIN
-> DELETE u FROM users AS u WHERE u.id=id;
-> END
-> //
6.举例创建一个含in和out的存储过程

DELIMITER //

CREATE PROCEDURE removerUserAndReturnUserNums(IN p_id INT UNSIGNED,OUT usersNums INT UNSIGNED)
BEGIN
DELETE FROM users WHERE id = p_id;
SELECT COUNT(id) FROM users INTO userNums;
END

//

7.mysql变量的术语分类:
1).用户变量:以"@"开始,形式为"@变量名"
用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效
2.)全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名  或者  set @@global.变量名
对所有客户端生效。只有具有super权限才可以设置全局变量
3).会话变量:只对连接的客户端有效。
4.)局部变量:作用范围在begin到end语句块之间。在该语句块里设置的变量
declare语句专门用于定义局部变量。set语句是设置不同类型的变量,包括会话变量和全局变量

8.创建多个out的举例

create procedure removeage(in p_age smallint unsigned,out deletecounts smallint unsigned,out usercounts smallint unsigned)
-> begin
-> delete from t1 where age=p_age;
-> select row_count() into deletecounts;
-> selete count(id) from t1 into usercounts;
-> end
-> //
(t1是自己创建的需要处理的数据表)

9.存储过程与自定义函数的区别

存储过程实现的功能要复杂一些;而函数的针对性更强
存储过程可以返回多个值;而函数只能有一个返回值
存储过程一般独立的来执行;而函数可以作为其他SQL语句的组成部分来出现

原创粉丝点击