mysql 中什么是储存过程 PROCEDURE (mysql手册说明)?
用来储存一部分sql语句和着逻辑代码。说白了可以理解为:就是没有返回值的php函数。
储存过程定义结构:
CREATE [DEFINER = user] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body
CREATE :创建的关键字。
PROCEDURE :储存过程的关键字
sp_name :这个过程的名字(给这个储存过程起个名字)
proc_parameter :允许写入的参数类型 [ IN | OUT | INOUT ]
IN : 这个参数是输入类型的
OUT :这个是输出的类型参数。
INOUT :这是一个输出类型的输入参数。
routine_body :有效的sql语句
调用储存过程 :call sp_name ()
call :调用的关键字
sp__name :过程名字
删除储存过程:drop PROCEDURE sp__name
drop :删除的关键字
PROCEDURE :删除什么类型的数据
sp_name :对应的名字 注意:不带小括号()。
储存过程实例:
delimiter $ #这个很重要 修改定界符
#没有参数 CREATE PROCEDURE p1() BEGIN SELECT 1+2; END$ call p1()$ #返回值:3 #IN 输入类型的参数 CREATE PROCEDURE p2(IN age int) BEGIN DECLARE num int DEFAULT 1; SET num := age + 20; SELECT num END$ call p2(1)$ #返回值:21 #直接传入一个类型相同的数据就行。 #OUT 输出的类型参数 CREATE PROCEDURE p3(OUT age int) BEGIN DECLARE num int DEFAULT 1; SET age := num ; END$ call p3(@age)$ #只能传入变量,可以使定义的也可以是未定义的可以有值也可以没有值,注意:程序会在传入的时候自动把参数值设置成NULL; #在mysql NULL 和任何数 进行 加减乘除 结果都是 NULL。 SELECT @age$ #返回值:1 #INOUT 输出类型的输入参数 CREATE PROCEDURE p4(INOUT age int) BEGIN SET age := age +20; END$ SET @age := 10$ #先定义一个参数,再把参数传入,过程运行结束后吧值把存在这个歌输入的参数中 CALL p4(@age)$ #只能传入变量 SELECT @age$ #返回值:30
这样你就可以在BIGIN中来写你的sql语句,可以写循环,判断,增删改查,等。