代码音符

Mysql储存过程操作

创建时间: 2019-8-12 12:56

修改时间: 2023-6-26 18:06

浏览: 155

存储过程是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语句的组成部分来出现。

创建时间: 2019-8-12 12:56

修改时间: 2023-6-26 18:06

浏览: 155

*本文遵循 CC BY-NC-SA 许可协议。转载请注明出处!