SQL语句需要先编译然后执行,而存储过程()是一组完成特定功能的SQL语句。 它们被编译并存储在数据库中。 用户指定存储过程的名称并给出参数(如果存储过程有参数)来调用并执行它。
存储过程语法
过程名称 ([[IN|OUT|INOUT] 参数名称数据类型 [,[IN|OUT|INOUT] 参数名称数据类型...]]) [特征...] 过程体
DELIMITER //
CREATE PROCEDURE myproc(OUT s int)
BEGIN
SELECT COUNT(*) INTO s FROM students;
SELECT COUNT(*) INTO s FROM students;
SELECT COUNT(*) INTO s FROM students;
END
//
DELIMITER ;
MySQL 使用“;” 默认作为分隔符。 如果没有声明分隔符,编译器会将存储过程视为SQL语句,因此编译过程会报错。 因此,必须使用“//”提前声明当前段分隔符,这样编译器会将两个“//”之间的内容视为存储过程的代码,而不会执行这些代码; “;” 意思是恢复分隔符。
调用方式:call存储过程名 - 删除方式:drop存储过程名
传递用户变量
在存储过程中使用用户变量
create procedure cd1() select concat(@hl,'world');
set @hl='Hello ';
call cd1();
在存储过程之间传递用户变量 cd21() set @name = 'join'; cd22() @名称; 调用 cd22(); 调用 cd21(); 调用 cd22();
注意:滥用用户变量会使程序难以理解和管理。
参数类型
in:in类型的参数,存储过程中代码的修改不会影响变量的实际值,是单向参数。 out:out类型的参数,用于输出值,传入的值将被忽略。 可以在子程序内部修改。 - inout:该类型数据综合了以上两种类型的特点,可以传入或者修改。
()和()
():最近一次查询结果的行数 - ():最近一次增删改查影响的行数 - ():获取最近一次自动增加的ID
存储过程的好处
快速执行 - 允许模块化编程 - 提高系统安全性 - 减少网络流量
家庭作业
两张表:账户[id,用户名,密码,金额]和日志[id,描述]
编写一个存储过程,三个输入参数,一个输出参数,用户名,密码,初始金额,用于办卡。 生成用户名系统并将其记录在日志表中。 [1,id:1成功申请卡]——编写一个存储过程参数,参数为uname,输出参数为类型。 根据用户的金钱数量,可以判断用户是否富有【>10000为富有】,并将结果以参数的形式输出。 外向的