最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

窥探mysql存储过程细节_MySQL

来源:动视网 责编:小采 时间:2020-11-09 20:19:45
文档

窥探mysql存储过程细节_MySQL

窥探mysql存储过程细节_MySQL:存储过程,可以这样认为,将我们需要特殊处理的sql语句封装成函数,当需要的时候我们只需调用这个函数就可以实现我们想要的操作,这个过程我们可以称之为存储过程。当然了,真正存储过程的定义不是这样的。但是我们可以这样简单的去理解存储过程。下面我们看
推荐度:
导读窥探mysql存储过程细节_MySQL:存储过程,可以这样认为,将我们需要特殊处理的sql语句封装成函数,当需要的时候我们只需调用这个函数就可以实现我们想要的操作,这个过程我们可以称之为存储过程。当然了,真正存储过程的定义不是这样的。但是我们可以这样简单的去理解存储过程。下面我们看


存储过程,可以这样认为,将我们需要特殊处理的sql语句封装成函数,当需要的时候我们只需调用这个函数就可以实现我们想要的操作,这个过程我们可以称之为存储过程。当然了,真正存储过程的定义不是这样的。但是我们可以这样简单的去理解存储过程。

下面我们看一个简单的使用存储过程的例子。

首先我们新建一张表 proced:

create table proced(
 id int(5) primary key auto_increment,
 name varchar(50),
 type varchar(50)
);

然后我们需要向这个表中插入10万条数据,这个时候我们需要借助存储过程来实现这一功能。

mysql> delimiter //
mysql> create procedure adddata()
 -->begin
 -->declare n int default 0;
 -->while ndo
 -->insert into proced(name,type) values(‘迹忆博客','onmpw');
 -->set n = n+1;
 -->end while;
 -->end
 -->//
mysql> delimiter ;
mysql> call adddata();

使用上述存储过程,我们就可以向proced表中插入10万条数据了。

借助上述小例子,我们来讲一下如何创建一个存储过程。

创建存储过程

首先我们来看一下创建存储过程的语法:

CREATE PROCEDURE procedure_name(IN/OUT/INOUT parameter TYPE)
BEGIN
 procedure_body
END

这个过程比较简单。

在上面的小例子中我们看到在创建存储过程之前使用了delimiter //;,创建完成之后又再次 使用了命令 delimiter ;。

delimiter 是界定符,我们知道,在mysql命令行客户端,是通过分号(;)来界定一个命令是否完成的。在存储过程中,我们会多次使用到分号,但是这并不代表命令的结束,所以说我们需要使用delimiter命令来改变这个界定符。

mysql> delimiter //; 改变界定符为 //
mysql> delimiter ; 重新改变界定符为分号

所以说我们如果使用mysql命令行创建存储过程的话,我们必须在创建存储过程之前使用上述命令改变界定符。

接下来我们看到procedure_name()中的IN/OUT/INOUT,这是代表什么意思呢?

一个IN类型的参数会传递一个值到存储哦过程中,也就是我们在编程语言中自定义函数的参数。如果参数前面没有指定是IN/OUT/INOUT,那默认会是IN,看下面的例子:

mysql>delimiter //
mysql> create procedure in_proced(IN param VARCHAR(100))
 -->begin
 -->insert into proced(name,type) values(param,'onmpw');
 -->end
 -->//
mysql>delimiter ;
mysql> call in_proced(‘onmpw.com');

这就是在参数前指定IN的含义。

下面我们看OUT,指定为OUT的参数将从存储过程中传递一个值给调用者,也就是说,OUT可以认为这个参数就是我们自定义函数中的返回值。

mysql> delimiter //
mysql> create procedure out_proced(OUT param INT)
 -->begin
 -->select count(*) into param from proced;
 -->end
 -->//
mysql>delimiter ;
mysql> call out_proced(@a);
mysql>select @a;
+------+
| @a |
+------+
| 3 |
+------+

最后就是INOUT,很明显INOUT指定的参数被调用者初始化,其值在存储过程中可以被修改,并且任何改变对于调用者来说都是可见的。

看下面的例子:

mysql> delimiter //
mysql> create procedure inout_proced(INOUT param INT)
 --> begin
 --> select count(*) into param from proced where id>param;
 --> end
 -->//
mysql>delimiter ;
mysql>set @a = 3;
mysql>call inout_proced(@a);
mysql>select @a; 查看变量的值是否改变

文档

窥探mysql存储过程细节_MySQL

窥探mysql存储过程细节_MySQL:存储过程,可以这样认为,将我们需要特殊处理的sql语句封装成函数,当需要的时候我们只需调用这个函数就可以实现我们想要的操作,这个过程我们可以称之为存储过程。当然了,真正存储过程的定义不是这样的。但是我们可以这样简单的去理解存储过程。下面我们看
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top