存储过程的好处
1、使用了存过程,很多相似性的删除,更新,新增等操作就变得轻松了,并且以后也便于管理!
2、存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。
3、存储过程可以接受参数、输出参数、返回单个或多个结果集以及返回值。可以向程序返回错误原因。
4、存储过程运行比较稳定,不会有太多的错误。只要一次成功,以后都会按这个程序运行。
5、存储过程主要是在服务器上运行,减少对客户机的压力。
6、存储过程可以包含程序流、逻辑以及对数据库的查询。同时可以实体封装和隐藏了数据逻辑。
7、存储过程可以在单个存储过程中执行一系列SQL语句。
8、存储过程可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
#存储过程和函数
/*
存储过程和函数:类似于java中的方法
好处:
1、提高代码的重用性
2、简化操作
*/
#存储过程
/*
含义:一组预先编译好的SQL语句的集合,理解成批处理语句
1、提高代码的重用性
2、简化操作
3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
*/
procedure-过程
in进
out出
#一、创建语法
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
存储过程体(一组合法的SQL语句)
END
注意:
1、 参数列表包含三部分
参数模式 参数名 参数类型
举例:
IN stuname VARCHAR (20)
参数模式:
IN: 该参数可以作为输入,也就是该参数需要调用方传入值
OUT: 该参数可以作为输出,也就是该参数可以作为返回值
INOUT:一该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值
2、2、如果存储过程体仅仅只有一句话,BEGIN END可以省略
存储过程体中的每条sQl语句的结尾要求必须加分号。
存储过程的结尾可以使用DELIMITER 重新设置
语法:
DELIMITER 结束标记
案例:
DELIMITER $
#二、调用语法
CALL 存储过程名(实参列表) ;
#1.空参列表
#案例:插入到admin表中五条记录
SELECT * FROM admin;|
DELIMITER $
CREATE PROCEDURE myp1 ()
BEGIN
INSERT INTO admin (username,password)
VALUES('john1' , '0000'), ('lily', '0000'), ('rose', '0000'), ('jack', '0000'), ('tom', '0000') ;
END $
#调用
CALL myp1 ()$
为什么不是;,因为前面DELIMITER $
#2.创建带in模式参数的存储过程
#案例1:创建存储过程实现根据女神名,查询对应的男神信息
CREATE PROCEDURE myp2 (IN beautyName VARCHAR(20))
BEGIN
SELECT bo.*
FROM boys bo
RIGHT JOIN beauty b ON bo.id = b.boyfriend_id
WHERE b. name=beautyName;
END $
#调用
CALL myp2 ('柳岩')$
#案例2 :创建存储过程实现,用户是否登录成功
CREATE PROCEDURE myp4(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')$