时间:2022-03-09来源:www.pcxitongcheng.com作者:电脑系统城
存储过程是数据库的一个重要的功能,MySQL 5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0开始支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。
语法
CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...] 过程体
1 2 3 4 5 6 7 |
DELIMITER // CREATE PROCEDURE myproc( OUT s int ) BEGIN SELECT COUNT (*) INTO s FROM students; END // DELIMITER ; |
分隔符
MySQL默认以";"为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错,所以要事先用“DELIMITER //”声明当前段分隔符,让编译器把两个"//"之间的内容当做存储过程的代码,不会执行这些代码;“DELIMITER ;”的意为把分隔符还原。
参数
存储过程根据需要可能会有输入、输出、输入输出参数,如果有多个参数用","分割开。MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT:
IN参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值OUT:该值可在存储过程内部被改变,并可返回INOUT:调用时指定,并且可被改变和返回
过程体
过程体的开始与结束使用BEGIN与END进行标识。
1 2 3 4 5 6 7 8 9 10 11 12 |
create procedure demo.p_test1() begin -- 使用 declare语句声明一个变量 declare id int default 0; declare name varchar (50) default '' ; -- 使用set语句给变量赋值 set id=7521; -- 将users表中id=1的名称赋值给username select ename into name from demo.emp where empno=id; -- 返回变量 select name ; end ; |
1 2 3 4 |
create table demo.test( id int , cnt varchar (50) ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
create procedure demo.p_test2() -- 通过游标遍历结果集 begin -- 声明变量 declare id int default 0; declare name varchar (50) default '' ; declare done boolean default 1; -- 声明游标 declare rs cursor for SELECT deptno,dname from demo.dept ; -- 定义异常: declare continue handler for SQLSTATE '02000' SET done = 0; -- 打开游标 open rs; delete from demo.test; while done do begin fetch rs into id, name ; INSERT into demo.test SELECT e.deptno, count (1) from demo.emp e WHERE e.deptno =id group by e.deptno; end ; end while; -- 关闭游标 close rs; end ; |
1 | call demo.p_test2(); |
1 | SELECT * from demo.test; |
到此这篇关于MySQL存储过程讲解的文章就介绍到这了
2023-10-30
windows上的mysql服务突然消失提示10061 Unkonwn error问题及解决方案2023-10-30
MySQL非常重要的日志bin log详解2023-10-30
详解MySQL事务日志redo log一、单表查询 1、排序 2、聚合函数 3、分组 4、limit 二、SQL约束 1、主键约束 2、非空约束 3、唯一约束 4、外键约束 5、默认值 三、多表查询 1、内连接 1)隐式内连接: 2)显式内连接: 2、外连接 1)左外连接 2)右外连接 四...
2023-10-30
Mysql删除表重复数据 表里存在唯一主键 没有主键时删除重复数据 Mysql删除表中重复数据并保留一条 准备一张表 用的是mysql8 大家自行更改 创建表并添加四条相同的数据...
2023-10-30