在我们使用数据库的时候,MYSQL执行的顺序是,先判断写入的语句是否正确,然后在进行编译,最后再进行执行。存储过程通俗来说就是,我们在使用数据库的时候,经常会有一些重复性的操作,这些操作不仅仅是影响了我们工作时候的效率,也会拖慢计算机的速度。创建存储过程之后,计算机就能够省去判断和编译的过程吗,直接执行。
创建存储过程的方法和创建函数的方法基本类似,但是要注意的一点是参数的特点,过程的参数前面需要加上in ‘out、 inout等关键词,in表示该参数在调用过程的时候直接指定,不能返回;out 表示该参数能够返回,不能修改;inout 表示该参数可以修改和返回。
首先来创建一个不带参数的存储过程,用它来返回当前mYSQL的版本信息:
创建的过程很简单,不带参数的存储过程,在名称的后面可以加上括号也可以不加,调用过程的方法是Call 加上过程的名字。
然后来创建带一个in参数的存储过程,比如说我们要删除users表中的某一列,按照id选择:
users表中一共有9个记录,id是从1-9;
DELIMITER 是修改终止符,因为在写SQL语句之间要用分号隔开,但是计算机在识别到分号之后会立即执行,就执行不到后面的语句。
这里,我们通过call引用了过程,同时输入了参数7,所以users表格中的id=7的记录就删除了;
下面是创建带返回参数的存储过程,比如说我们要返回刚才删除后剩下的记录数量:
调用一下方法,检验一下刚才写的过程是否正确:
可以看到我在out参数里面写的是@r,@r表示的是一个变量,在这里称为用户变量,用来接收返回值,通过SELECT @r可以得到剩下的记录数量,而且,确实id=1的那条记录已经被删除了。
那么,还剩下最后一个问题,就是可不可以返回多个值呢,答案是可以的,这也算是和构造函数的不同,我们来创建过程,实现添加用户名,密码,输出添加的记录数以及总共的记录数量:
创建过程后,调用,并且输入参数,下面看看结果:
好的,david确实是加入到了users表格,接下来看看两个变量:
我们可以看到i的值是空的,这是因为在过程体中我们忘记写入:
SELECT ROW_COUNT() INTO influence;
但是过程在创建之后,过程体是不能够修改的,只能删除重写:
DROP PROCEDURE addAndReturnInfo;即可
关于构造函数和存储过程的区别: