含义: 一组预先编译好的SQL语句的集合,可理解成批处理语句,类似于JAVA中的方法。 使用时直接调用名字就可以
好处: 1. 提高代码的重用性;2.简化操作;3.减少了编译次数,并且减少了和数据库服务器的连接次数,提高了效率。
注意:
参数列表包含三部分: 参数模式+参数名+参数类型 in stuname VARCHAR(20)其中参数模式:
IN: 该参数可作为输入。 即该参数需要调用方传入值OUT : 该参数可作为输出,该参数可以作为返回值INOUT:该参数可作为输出,也可以作为输出; 即该参数既需要传入值,又可以返回值 如果存储过程体仅仅只有一句话,BEGIN END可以省略。存储过程体中的每条SQL语句结尾要修必须加分号。 存储过程体的结尾可以使用DELIMITER 重新设置。 语法:DELIMITER 结束标记 比如, DELIMITER $在终端里面下面输入代码。
#创建 DELIMITER $ create PROCEDURE myp1() BEGIN insert into 学生表(姓名,学号) VALUES(A,004),(b,004),(,004); END $ #调用 CAll myp1()$注意! 当DELIMITER $生效后,语句结尾要使用 $ 而不是分号;
完成后可以在函数这里看到myp1
例子:输入课程名字,查询对应的教师信息
#创建 # DELIMITER $ 开头写过就不用再写一次了 create PROCEDURE myp2(in c_name VARCHAR(20)) BEGIN select t.* from teacher t right join course c on t.t_id=c.t_id where c.c_name=c_name; END $ #调用 CAll myp2('这里输入对应的值')$例子:输入课程名字,返回对应的教师名字
#创建 # DELIMITER $ create PROCEDURE myp3(in c_name VARCHAR(20),out t_name VARCHAR(20)) BEGIN select t.t_name into t_name #使用into赋值 from teacher t right join course c on t.t_id=c.t_id where c.c_name=c_name; END $ #调用 CAll myp3('语文',@tname)$ select @tname$结果展示:
传入a,b两个值,最后两个值翻倍返回
#创建 # DELIMITER $ create PROCEDURE myp4(inout a int, inout b int) BEGIN set a=a*2 set b=b*2; END $ #调用 set @m=10$ set @n=20$ CAll myp4(@m,@n)$ select @m,@n$注意只能一次删除一个
存储过程里的逻辑语句不能修改