变量variable:所有mysql变量都必须以@开头.
存储过程
创建语法
create PROCEDURE 存储过程名()
BEGIN
select * from `user` where `name`='张三'; --执行语句.
END
调用语法
call 存储过程名()
删除存储过程
drop PROCEDURE proce_select_name -- 注意后面是不带()
删除存储过程时,如果存储过程不存在就会出错,如果要想不出错要这样写:
drop PROCEDURE if EXISTS proce_select_name
-- 创建带参数的语法。
-- 带输入参数
create procedure 存储过程名( out 参数名1 DECIMAL(8,2), out 参数名2 VARCHAR(50) ) BEGIN select AVG(age) into 参数名1 from `user` ; select `name` from `user` where `id`='3' into 参数名2; END
CALL 存储过程名(@变量1,@变量2);
select @变量1,@变量2;
-- 带输入输出参数
create PROCEDURE 存储过程名(
IN 转入参数名1 int ,
OUT 参数名2 VARCHAR(50)
)
BEGIN
select hobby from `user`
where id = 转入参数名1
into 参数名2;
END
drop PROCEDURE if EXISTS 存储过程名
CALL 存储过程名(转入参数,@输出变量);
select @输出变量
关键字解释:
IN 把外界的值传递给存储过程使用 的变量
OUT 定义存储过的传出变量
INOUT 为存储过程定义传入传出变量 .
INTO 存储过程的结果保存到相应的变量.
--示例: 创建带参数的。
-- 带输入参数
create procedure proce_select_name( out temp_age DECIMAL(8,2), out temp_name VARCHAR(50) ) BEGIN select AVG(age) into temp_age from `user` ; select `name` from `user` where `id`='3' into temp_name; END CALL proce_select_name(@age,@name); select @age,@name; -- 带输入输出参数 create PROCEDURE proce_get_hobby_for_id( IN set_id int , OUT get_hobby VARCHAR(50) ) BEGIN select hobby from `user` where id = set_id into get_hobby; END drop PROCEDURE if EXISTS proce_get_hobby_for_id CALL proce_get_hobby_for_id(1,@hobby); select @hobby -- 智能存储过程。。 create procedure proce_age_for_id ( IN set_id int, IN is_bool BOOLEAN, OUT get_age INT ) BEGIN DECLARE temp_age int; -- 用DECLARE关键字定义了一个int类型的temp_age局部变量 DECLARE extra_age int DEFAULT 5; select age from `user` where id = set_id INTO temp_age; --if 检查is_bool是否为真,如果为真就执行. if 语句还支持elseif ,else字句. if is_bool THEN select temp_age + extra_age INTO temp_age; end if; select temp_age INTO get_age; END; CALL proce_age_for_id(3,0,@scal_age); select @scal_age;
-- 查询存储过程创建语句
show create procedure 存储过程名
建立示例表语句
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `age` int(3 ) DEFAULT NULL, `hobby` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=gbk