Mysql的 存储过程procedure及具体案例
什么是存储过程
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名字和参数(如果有)来执行它。存储过程可以在很多数据库管理系统(DBMS)中找到,如SQL Server、Oracle、MySQL等。
存储过程的好处:
- 代码重用:存储过程允许你编写一次代码,然后在多个地方重复使用。
- 简化操作:对于复杂的数据库操作,可以将这些操作封装在存储过程中,用户只需调用存储过程即可。
- 提高性能:存储过程在首次执行时会进行编译和优化,后续的调用会重用这些编译后的代码,从而提高性能。
- 安全性:通过存储过程,你可以限制对基础表的直接访问,只允许通过预定义的、受控的接口进行访问。
- 集中管理:所有的数据库操作逻辑都存储在数据库中,使得管理和维护更加容易
使用存储过程需要注意的是 :
1. declare语句只能放在存储过程的开始位置,放在后面就会报错
2. if 语句的后面必须有then,但是不需要begin,在if结束时需要end if
3. 判断是否为NULL倒是和MSSQL一样都有IS NULL
4. delimiter是定界符的意思在结束的end后面要添加定界符
5. end if之后必须跟分号,否则语法错误
6. while后面跟条件,条件后面要跟一个do,在while循环体结束之后需要end while并以分号结束。
7. in 表入参(默认) , out 表出参 , inout 表出入参
8. 两种赋值方式: set ,select into
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
SET a = 0;
具体案例:
1. 基本案例
-- 代码 DELIMITER $$ CREATE PROCEDURE test1(IN ss VARCHAR(100)) BEGIN SELECT ss ; END $$ -- 调用 SET @s1 = '你好' ; CALL test1(@s1) ; --
2. 带出参案例
-- 代码
DELIMITER $$ CREATE PROCEDURE testproce(IN score INT,OUT rs VARCHAR(200)) BEGIN DECLARE sc INT; SET sc = score ; IF sc < 0 OR sc > 100 THEN SET rs = 'score error'; ELSEIF sc > 80 THEN SET rs = 'A'; ELSEIF sc > 60 THEN SET rs = 'B'; ELSE SET rs = 'C'; END IF ; END $$
-- 调用 SET @a1 =60; SET @a2 = ''; CALL testproce(@a1,@a2); SELECT @a2 ; --
3.while的简单应用
-- 代码
DELIMITER $$ CREATE PROCEDURE proc_add_looply(IN $className VARCHAR(200),INOUT $insertTimes INT) BEGIN WHILE $insertTimes>0 DO INSERT INTO classes VALUES(DEFAULT,$className); SET $insertTimes = $insertTimes - 1 ; END WHILE; COMMIT; END $$
-- 调用 SET @lp_1 = '班' ; SET @lp_2 = 5 ; CALL proc_add_looply(@lp_1,@lp_2); --
4.用数据库中的数据赋值
-- 代码
DELIMITER $$ CREATE PROCEDURE show_job_dept(IN no2 INT,OUT job2 VARCHAR(100),OUT dno2 INT) BEGIN SELECT job,deptno INTO job2,dno2 FROM emp WHERE EMPNO = no2; END $$
-- 调用 SET @sjd_1 = 7369; SET @sjd_2 = ''; SET @sjd_3 = 0; CALL show_job_dept(@sjd_1,@sjd_2,@sjd_3); SELECT @sjd_2 ; SELECT @sjd_3 ; --
到此这篇关于Mysql的 存储过程(procedure)的文章就介绍到这了,更多相关Mysql 存储过程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Starting MySQL.Manager of pid-file quit without updating fil
因为硬盘满了,Starting MySQL.Manager of pid-file quit without updating file.[FAILED]2010-02-02MySQL四种日志binlog/redolog/relaylog/undolog详解
undo log主要存储的也是逻辑日志,比如我们要insert一条数据了,那undo log会记录的一条对应的delete日志,我们要update一条记录时,它会记录一条对应相反的update记录,这篇文章主要介绍了MySQL四种日志binlog/redolog/relaylog/undolog,需要的朋友可以参考下2024-08-08
最新评论