24-mysql --存储过程
存储过程含义:一组预先编译好的sql语句的集合,理解成批处理语句1 提高代码的重用性2 简化操作3 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率1 创建语法CREATE PROCEDURE 存储过程名(参数列表)BEGIN存储过程体(合法的slq语句)END注意:1 参数列表包含三部分:参数模式、参数名、参数类型举例:IN stuname VARCHAR(20)参数模式:IN:该参
·
存储过程
含义:一组预先编译好的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;
更多推荐
已为社区贡献1条内容
所有评论(0)