2、简化操作
存储过程
含义:一组预先编译好的SQL语句的集合,理解成批处理语句
1、提高代码的重用性
2、简化操作
3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
语法:
----->
<-----
参数列表包含三部分: 参数模式 参数名 参数类型
例如: in stuname varchar(20)
参数模式:
注意:
语法:
delimiter 结束标记
案例:
DELIMITER $
CREATE PROCEDURE student()
BEGIN
SELECT * FROM student;
END $
DELIMITER ;
----------
==========
1.1 创建存储过程
DELIMITER $
CREATE PROCEDURE myp1()
BEGIN
INSERT INTO student(NAME,grade) VALUES('盖伦',50);
END $
DELIMITER ;
1.2 调用
CALL myp1();
说明:每次调用这个存储过程都会执行存储体中的SQL语句,即向student表中插入一条语句。
-----
2.1 创建
DELIMITER $
CREATE PROCEDURE myp2(IN stuName VARCHAR(20))
BEGIN
SELECT s.* FROM student s WHERE s.name = stuName;
END $
DELIMITER ;
2.2 调用CALL myp2('盖伦');
说明:
2.3 拓展
#案例 :创建存储过程实现,用户是否登录成功
CREATE PROCEDURE myp3(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))
BEGIN
DECLARE result INT DEFAULT 0;#声明并初始化
SELECT COUNT(*) INTO result#赋值
FROM admin
WHERE admin.username = username
AND admin.password = PASSWORD;
SELECT IF(result>0,'成功','失败');#使用
END $
#调用
CALL myp3('张飞','8888')$
说明:
3.1 创建
DELIMITER $
CREATE PROCEDURE myp4(IN stuName VARCHAR(20),OUT grade INT)
BEGIN
SELECT s.grade INTO grade FROM student s WHERE s.name = stuName;
END $
DELIMITER ;
这里定义的OUT参数作为一个局部变量存在
3.2 调用
CALL myp4('盖伦',@grade);
定义一个用户变量grade存入存储过程中,让它保存数据。
3.3 查看数据
SELECT @grade;
-----
案例:传入a和b两个值,最终a和b都翻倍并返回
4.1 创建
DELIMITER $
CREATE PROCEDURE myp5(INOUT a INT ,INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
END $
DELIMITER ;
4.2 调用
SET @m=10;
SET @n=20;
CALL myp8(@m,@n);
SELECT @m,@n;
==========
示例:
DROP PROCEDURE p1;
==========
DESC myp2;
SHOW CREATE PROCEDURE myp2;