您的位置:首页 > 数据库 > MySQL

mysql --- 存储过程

2016-02-27 09:53 525 查看
我们输入的SQL命令 MysSQL引擎 会分析语法是否正确

正确了然后在进行编译 编译了可识别命令 最后执行

并将执行结果返回给客户端

如果减去了引擎的编译和命令的识别 就可以提高效率

存储过程

存储过程是SQL语句和控制语句的预编译集合,以一个名称存储

并作为一个单元处理 存储过程存储在数据库内 可以由应用·

程序调用执行 允许用户声明变量而且进行流程控制

存储过程可以接收参数 可以接收输入类型的参数

也可以接收输出类型的参数

存储过程的优点

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

实现较快的执行速度

减少了网络流量

创建存储过程

CREATE
[DEFINER ={user| CURRENT_USER}]

PROCEDURE sp_name([proc_parameter[,..]])
[characteristic ..] routine_body

proc_parmeter:
[IN|OUT|INOUT] param_name type

IN,表示该参数的值必须在调用存储过程时指定
OUT, 表示该参数的值可以被存储过程改变,并且可以返回
INOUT,表示该参数的调用时指定,并且可以被改变和返回
过程体
过程体由合法的SQL语句构成;
过程体可以是任意SQL语句;
过程体如果为复合结构则使用 BEGIN..END语句
复合结构可以包含声明,循环,控制结构


修改存储过程

ALTER PROCEDURE sp_name[characteristic ..]

COMMENT 'string'

|{CONTAIN SQL| NO SQL| READS SQL DATA| MODIFIES SQL DATA}

|SQL SECURITY{DEFINER|INVOKER}

删除存储过程

DELETE PROCEDURE name

创建不带参数的存储过程

CREATE PROCEDURE sp1() SELECT VERSION();

调用存储过程

CALL sp_name([parameter[,..]])

CALL SP_name[()]

call sp1;

call sp1();
DELIMITER //
CREATE PROCEDURE removeUserById( IN p_id INT UNSIGNED )
BEGIN
DELETE FROM users WHERE id = p_id;
END
//
DELIMITER ;

CALL removeUserById(3);

CREATE PROCEDURE removeUserAndRturnUserNums(IN p_id INT UNSIGNED,OUT userNums INT )
BEGIN
DELETE FROM users WHERE id= p_id;
SELECT count(id) FROM users INTO userNums;
END
DELIMITER ;
CALL removeUserAndRturnUserNums(27,@nums);
select @nums;   --表示变量   局部变量只能在begin 和end之间 有效 ,没有
set @i =7  用户变量
SELECT ROW_COUNT();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: