Mysql储存过程

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


创建储存过程

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

proc_parameter:[IN|OUT|INOUT] param_name type


简单示例1(下方有调用存储过程示例):

CREATE PROCEDURE sp1() SELECT VERSION();

创建了一个名称为sp1的存储过程,功能是查询数据库版本号。


简单示例2:

先切换SQL语句结束符:

DELIMITER &&

创建储存过程(注意参数名与字段名一定不可相同)

CREATE PROCEDURE removeUserById(IN p_id INT UNSIGNED)
BEGIN
DELETE FROM users WHERE id = p_id;
END &&

接下来可以将之前的结束符切换回来

DELIMITER ;

这样我们就创建了一个名称为removeUserById的存储过程,他需要一个参数id,功能是根据这个id删除用户表中的用户。


简单示例3:

先切换SQL语句结束符

DELIMITER &&

创建储存过程(注意参数名与字段名一定不可相同)

CREATE PROCEDURE removeUserAndReturnUserNUms(IN p_id INT UNSIGNED, OUT userNums INT UNSIGNED)
BEGIN
DELETE FROM users WHERE id = p_id;
SELECT count(id) FROM users INTO userNums;
END &&

接下来可以将之前的结束符切换回来

DELIMITER ;


调用储存过程

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


执行以上简单示例1:

CALL sp1;
CALL sp1();


执行以上简单示例2:

CALL removeUserById(3);

执行以上简单示例3:

CALL removeUserAndReturnUserNums(27, @nums);
SELECT @nums;

为Mysql客户端设置用户变量
SET @i = 7;
查询全局变量
SELECT @i;


删除储存过程

DROP PROCEDURE [IF EXISTS] sp_name


修改存储过程

ALTER PROCEDURE sp_name [characteristic …]
COMMENT 'string'
| {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA} | SQL SECURITY {DEFINER | INVOKER}

注:该方法只能修改部分特性,无法修改过程体,修改过程体需要删除过程后重新创建。并不常用。


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

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



11

文章分类:Mysql

所属标签: 对比 自定义函数 储存过程 mysql 数据库 sql


评论:

天下第二:

  回访,没有用啥编辑器,自己 js 写的一个发布文章的代码

啊~评论区就像肚皮一样空荡荡的。。。快来留下点啥充充饥