千家信息网

mysql存储过程 in out inout

发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,存储过程的好处存储过程是一组预编译好的sql语句,用来执行某个特定的功能。这样可以省去sql解析、编译、优化的过程,提高了执行效率,同时,在调用的时候只传一个存储过程的名称,而不用传一大堆sql语句,
千家信息网最后更新 2024年11月24日mysql存储过程 in out inout

存储过程的好处

存储过程是一组预编译好的sql语句,用来执行某个特定的功能。这样可以省去sql解析、编译、优化的过程,提高了执行效率,同时,在调用的时候只传一个存储过程的名称,而不用传一大堆sql语句,减少了网络传输。也间接提高了执行效率。

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

  1. 存储过程是一组sql语句,为了实现某个独立的功能,一般独立执行。而自定义函数更多的作为其它sql语句的组成部分出现。
  2. 自定义函数只能有一个返回值,而存储过程可以有多个返回值。
  3. 存储过程功能复杂,函数针对性更强

存储过程定义

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

创建语法

create [definer = {user|current_user}]procedure proc_name ([参数[,....]])some body code....参数:[in | out | inout] 参数名 类型in  传入的参数out 返回的参数inout 传入 改变 并且返回的参数

调用语法

call proc_name(参数);
如果没有参数,括号可以省略;

示例

创建没有参数的存储过程

create procedure ver()select version();

调用

call ver(); 或 call ver;

当然这里把一个函数放进一个存储过程没有什么意义。只是单纯为了举例。

创建一个in参数的存储过程

我们经常查询id为某值的用户,所以我们把它写成一个存储过程。

delimiter //create procedure findUserById(in userId int unsigned)beginselect * from user where id = userId;end //delimiter ;

注意:参数名不要和数据表中的字段名相同,否则会出现意想不到的后果。

调用
call findUserById(1);

创建一个in 一个out参数的存储过程

删除一个用户并且返回剩余用户数量

delimiter //create procedure delUserByIdAndReturnNums(in userId int unsigned,out nums int unsigned )begindelete from user where id=userId;select count(id)  from user into nums;end //delimiter ;

调用:
call delUserByIdAndReturnNums(1,@nums);调用过后我们就可以查看@nums的值了。
br/>调用过后我们就可以查看@nums的值了。

创建一个in多个out参数的存储过程

删除一个用户并返回剩余用户总数 和 被删除用户的姓名

delimiter //create procedure delUser(in userId int ,out nums int,out username varchar(20))beginselect name from user where id = userId into username;delete from user where id = userId;select count(id) from user into nums;end //delimiter ;

调用
call delUser(3,@nums,@username);
调用过后可以查看两个变量的值。
select @nums;
select @username;

创建带有inout参数的存储过程

定义一个存储过程,传入一个整数得到其平方值。

delimiter // create procedure square(inout num int)begin set num=num*num;end //delimiter ;

调用:
由于其参数是inout类型,所以我们需要传入一个赋值过的变量,以便在存储过程内部对其修改后返回。

set @num=3;call square(@num);select @num;

其结果如下:
mysql> set @num=3;
Query OK, 0 rows affected (0.00 sec)

mysql> call square(@num);
Query OK, 0 rows affected (0.02 sec)

mysql> select @num;
+------+
| @num |
+------+
| 9 |
+------+
1 row in set (0.00 sec)

过程 存储 参数 用户 语句 函数 功能 过后 编译 变量 名称 多个 效率 类型 语法 剩余 独立 复杂 相同 意想不到 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳数据库技术回放 全球网络安全龙头公司市值 大兴品牌服务器回收公司 鄞州游戏软件开发管理 psv 更新数据库 重构数据库 网络安全建设主要政策 数据库删除某一个时段前的数据 海光兆芯服务器 华科云R1服务器端软件 数据库安全保护包括 学校网络安全等级保护工作 网上下载源码怎么修改数据库 win8启动网络管理服务器 linux服务器安装证书 国家电网网络安全宣传 专科生能不能学计算机网络技术 2018年国家网络安全宣传周活动主题是什么 vb查询数据库的代码怎么写 什么是ctf网络安全赛 政府网络安全的定义 qq音乐能播放家用服务器的歌吗 澳大利亚调查网络安全 时代系服务器升级迁移到什么地方 高斯数据库用的广吗 对会计软件开发企业的建议 win11远程桌面无法连接到服务器 t6连接不到本地数据库 诛仙单机数据库密码 网络安全测试员 网络安全ctf是什么意思
0