24-mysql --存储过程

存储过程

含义:一组预先编译好的sql语句的集合,理解成批处理语句
1 提高代码的重用性
2 简化操作
3 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

1 创建语法

CREATE PROCEDURE 存储过程名(参数列表)
BEGIN 
	存储过程体(合法的slq语句)
END

注意:
1 参数列表包含三部分:
参数模式、参数名、参数类型
举例:
IN stuname VARCHAR(20)

参数模式:
IN:该参数可以作为输入,该参数需要调用方传入值
OUT:该参数可以作为输出,该参数可以作为返回值
INOUT:该参数既可以作为输入也可以作为输出,该参数既需要传入值,也可以返回值

2 如果存储过程体只有一句话,BEGIN END 可以省略,
存储过程体中的每条SQL语句的结尾要求必须加分号;
存储过程体的结果可以使用DELIMITER重新设置
语法:
DELIMITER 结束标记
案例:
DELIMITER $

sqlyog中不支持存储过程写法

2 调用语法

CALL 存储过程名(实参列表);

3 案例

案例1 不带参数:插入到admin表中4条记录
DELIMITER $
CREATE PROCEDURE myInsert()
BEGIN
	INSERT INTO admin(username,PASSWORD)
	VALUES('henry1','000'),('henry2','000'),('henry3','000'),('henry4','000');
END $

调用
CALL myInsert()$

案例2 带输入参数:存储过程实现,根据女生名,查询对应的男神信息
CREATE PROCEDURE myquery(IN beautyName varcahr(20))
BEGIN
	SELECT bo.*
	FROM boys bo
	RIGHT JOIN beauty b ON bo.id=b.boyfriend_id
	WHERE b.name=beautyName;
END $

CALL myquery('柳岩');

案例3 :创建存储过程实现,用户是否登录成功
CREATE PROCEDURE mypro(IN username VARCHAR(30),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,'success','fail');#使用
END $

删除存储过程

每次只能删除一个存储过程

语法:DROP PROCEDURE 存储过程名
DROP PROCEDURE p1;
DROP PROCEDURE p1,p2;//报错,每次只能drop一个

查看存储过程信息

desc 只能用于查看表,不能用于查看存储过程
==查看存储过程 用show create procedure 存储过程名;

SHOW CREATE PROCEDURE p1;

猜你喜欢

转载自blog.csdn.net/weixin_40719943/article/details/106894832