在linux中建立mysql存储过程

2017-11-05  本文已影响0人  Walkerc

之前在项目上遇到一个问题,实施人员在数据库中建了许多临时的测试数据,在正式客户环境中是要删掉的,但是产品页面上没有删除选项,只能手动在数据库中删除。不仅数据多,而且表之间关系复杂,一条一条删除估计客户的黄花菜都凉了。所以就有了这篇文章,记录存储过程的一些语法,也便于大家参考。

什么是存储过程?

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。

说的直白一点就是,存储过程是一组特定功能sql的集合,第一次编译后无需再编译,后续需要时直接调用即可。

所以这个时候存储过程就派上了用场。

在linux怎么创建存储过程

先来看一个最简单的存储过程示例

create procedure demo()
begin
    select id, name from user;
    update user set age = 20 where name = 'zhangsan';
end

这个存储过程的名称就是demo,功能就是查出user表中所有的id和name,并把张三的年龄改为20,存储过程中的sql集合就写在begin...end之间

第一次在linux命令行中执行上述操作,可能都会报如下的错



告诉你第三行有语法错误,那是因为mysql认为你的语句到第一个 ; 就结束了,所以存储过程创建失败。对上述语句做如下改动

delimiter //
create procedure demo()
begin
    select id, name from user;
    update user set age = 20 where name = 'zhangsan';
end
//

第一行的作用就是把mysql默认分隔符改为//(当然你可以改为其他符号比如@,$等,但是不要改成 * 等中间语句会用到的),读到 // 时mysql才会认为一个完整语句结束

最后要记得创建完存储过程后,要执行 delimiter ;

存储过程常用语法

代码清单1

delimiter //
create procedure demo1(
    in input int,
    out output int,
    inout param int
)
begin
    declare num int default 0;
    set output = 0;
    select age into @myage from user where id = input;

    if @myage = 20 then
        set output = 200;
        set num = 2;
    elseif @myage = 21 then
        set output = 300;
        set num = 3;
    else
        set output = 400;
        set num = 4;
    end if;
    
    while param < num do
        set param = param + 10;
    end while;
end//
delimiter ;

# 给inout类型变量赋初值
set @param = 1;
# 调用存储过程
call demo1(3, @myout, @param);

# 查看变量值和结果
select @myage;
select @myout;
select @param;
三种参数调用方式
上一篇下一篇

猜你喜欢

热点阅读