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}


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




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



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


作者:筱剑Beta

2019-12-20 17:21:52.0编辑

2019-08-12 12:56:52.0创作

所属分类:Mysql

mysql
sql
发布

街角有人祝福,巷口有人哭,这里却没人评论ε=(´ο`*)))